本帖最后由 matrixgadener 于 2019-10-20 00:36 编辑 #include <stdio.h>
#include<stdlib.h>
void swap(float &a, float &b);
void print_f(float *L, int n);
int main(void)
{
int n;
scanf("%d", &n);
float *changdu=NULL;
changdu=(float*)malloc(n*sizeof(float));
for (int j = 0; j < n; j++)
{
scanf("%f", &changdu[j]);
}
printf("输入 %d 个木条\n",n);
printf("长度分别是:");
print_f(changdu,n);
printf("\n");
// if (n <= 2)
// {
// printf("%d\n", 0);
// continue;
// }
// //求出第二长的木棍
// int max = changdu[0];
// int second = changdu[1];
// for (int i = 0; i < n; i++)
// {
// if (changdu[i] >= max)
// {
// second = max;
// max = changdu[i];
// }
// else if (changdu[i] <= max && changdu[i] >= second)
// {
// second = changdu[i];
// }
// }
// //开始求最大阶梯数
// int k;
// if (second >= n - 1)
// {
// printf("%d\n", n - 2);
// continue;
// }
// else
// {
// for (k = 1; k <= n - 2; k++)
// {
// if (second >= k + 1)
// {
// continue;
// }
// else
// {
// printf("%d\n", k - 1);
// break;
// }
// }
// }
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
{
if(changdu[i]<changdu[j])
swap(changdu[i],changdu[j]);
}
}
printf("排序后长度:");
print_f(changdu,n);
printf("\n");
float second=changdu[1];
printf("第二长的长度是 %.3f\n",second);
int k_count=0;
// int k_count_=
for(i=2;i<n;i++)
{
if(second-1>changdu[i] && changdu[i]>=1)
k_count++;
}
printf("最终能搭的梯子数:%d\n",(k_count<(int)(second-1))?k_count:(int)(second-1));
free(changdu);
return 0;
}
void swap(float &a, float &b)
{
a=a-b;
b=b+a;
a=b-a;
return;
}
void print_f(float *L, int n)
{
for(int i=0;i<n;i++)
{
printf("%.3f ",*(L+i));
}
}
这是修改后的代码,不过我把长度输入看成float了,你得改一下
这里用到C语言的动态数组申请和释放,还有简单排序算法。
求第二长的代码你得再看一下,最后求梯子数的代码思路不太对,应该是比较“第二长-1”和“比第二长短到1之间”,这两个数较小的那个数才是答案,下面是我用的测试数据:
7
3.5 3 2.5 2 1.5 1 0.5
7
2 1.5 1 0.5 3.5 3 2.5
8
2 1.5 0.5 1 4.5 4 2.5 0.5
8
2 1.5 1.5 0.5 5 5 2.5 0.5
8
2 1.5 1.5 1.5 5 5 2.5 0.5
你可以看下还有没有问题,我大概解决了下 |