一道简单的C语言题目,求高手找错误
描述动物运动会马上就要开始了,撑杆跳高场地上,猴村的N(1<=N<=10000)个村民正排成一队有秩序地练习。“好高啊,我都不知道自己能不能跳过去”,懒猴慢条斯理地说道。...
描述
动物运动会马上就要开始了,撑杆跳高场地上,猴村的N(1<= N <= 10000 )个村民正排成一队有秩序地练习。“好高啊,我都不知道自己能不能跳过去”,懒猴慢条斯理地说道。“这么高,不知道最少要几只猴叠在一起才会够得着”,猕猴向来比较喜欢思考数学问题,这样说道。
试编一程序,计算出最少要几只猴叠在一起(一只猴踩在另一只猴的头上站立)才能够得着横杆(所谓够得着,指猴的身高总和不小于横竿的高度B)。如果N头猴叠在一起,都够不着横竿,则输出“impossible”
输入
输入数据有多组,每组有两行:
第一行:两个整数N(1 <= N <= 10000 )和B,表示队伍中猴的总数以及横竿的高度。
第二行:空格隔开的N个整数,表示每只猴的身高Hi(1 <= Hi <= 10000 )。
输出
对应每组输入数据,输出一行,一个整数,表示最少要几只猴才能够到横竿。如果N只猴叠在一起都够不着则输出“impossible”。
样例输入
7 35
1 2 3 4 5 6 7
8 29
1 1 1 1 1 1 1 1
9 48
12 34 4 56 67 1 2 3 8
12 135
23 87 3 45 32 14 46 31 30 28 29 9
9 200
9 8 7 6 5 4 3 2 1
样例输出
impossible
impossible
1
3
impossible
这个是我写的程序:
#include <stdio.h>
int main()
{ int k,i,j,n,b,hi[10000],t,sum=0;
scanf("%d%d",&n,&b);
for(i=0;i<n;i++)
scanf("%d",&hi[i]);
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(hi[j]>hi[k])
k=j;
t=hi[k];
hi[k]=hi[i];
hi[i]=t;
}
for(i=0;i<n;i++)
{ sum=sum+hi[i];
if(sum>=b)
{printf("%d",i+1);
break;
}
}
if(i==n)
printf("impossible");
return 0;
}
但是在在线测评里一直提示Wrong Answer at Test 1,我用那些样例测试都是对的啊,是格式有问题还是程序有问题?求大神解答 展开
动物运动会马上就要开始了,撑杆跳高场地上,猴村的N(1<= N <= 10000 )个村民正排成一队有秩序地练习。“好高啊,我都不知道自己能不能跳过去”,懒猴慢条斯理地说道。“这么高,不知道最少要几只猴叠在一起才会够得着”,猕猴向来比较喜欢思考数学问题,这样说道。
试编一程序,计算出最少要几只猴叠在一起(一只猴踩在另一只猴的头上站立)才能够得着横杆(所谓够得着,指猴的身高总和不小于横竿的高度B)。如果N头猴叠在一起,都够不着横竿,则输出“impossible”
输入
输入数据有多组,每组有两行:
第一行:两个整数N(1 <= N <= 10000 )和B,表示队伍中猴的总数以及横竿的高度。
第二行:空格隔开的N个整数,表示每只猴的身高Hi(1 <= Hi <= 10000 )。
输出
对应每组输入数据,输出一行,一个整数,表示最少要几只猴才能够到横竿。如果N只猴叠在一起都够不着则输出“impossible”。
样例输入
7 35
1 2 3 4 5 6 7
8 29
1 1 1 1 1 1 1 1
9 48
12 34 4 56 67 1 2 3 8
12 135
23 87 3 45 32 14 46 31 30 28 29 9
9 200
9 8 7 6 5 4 3 2 1
样例输出
impossible
impossible
1
3
impossible
这个是我写的程序:
#include <stdio.h>
int main()
{ int k,i,j,n,b,hi[10000],t,sum=0;
scanf("%d%d",&n,&b);
for(i=0;i<n;i++)
scanf("%d",&hi[i]);
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(hi[j]>hi[k])
k=j;
t=hi[k];
hi[k]=hi[i];
hi[i]=t;
}
for(i=0;i<n;i++)
{ sum=sum+hi[i];
if(sum>=b)
{printf("%d",i+1);
break;
}
}
if(i==n)
printf("impossible");
return 0;
}
但是在在线测评里一直提示Wrong Answer at Test 1,我用那些样例测试都是对的啊,是格式有问题还是程序有问题?求大神解答 展开
1个回答
展开全部
可能多组测试是一次进行的,试一下用while(scanf("%d%d",&n,&b)!=EOF){....}
完整代码如下
#include <stdio.h>
int main()
{
int k,i,j,n,b,hi[10000],t,sum=0;
while(scanf("%d%d",&n,&b)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&hi[i]);
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(hi[j]>hi[k])
k=j;
t=hi[k];
hi[k]=hi[i];
hi[i]=t;
}
for(i=0;i<n;i++)
{
sum=sum+hi[i];
if(sum>=b)
{
printf("%d\n",i+1);//这里没有换行,已改
break;
}
}
if(i==n)
printf("impossible\n");//这里没有换行,已改
}
return 0;
}
完整代码如下
#include <stdio.h>
int main()
{
int k,i,j,n,b,hi[10000],t,sum=0;
while(scanf("%d%d",&n,&b)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&hi[i]);
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(hi[j]>hi[k])
k=j;
t=hi[k];
hi[k]=hi[i];
hi[i]=t;
}
for(i=0;i<n;i++)
{
sum=sum+hi[i];
if(sum>=b)
{
printf("%d\n",i+1);//这里没有换行,已改
break;
}
}
if(i==n)
printf("impossible\n");//这里没有换行,已改
}
return 0;
}
追问
用了这个之后还是提示答案错误啊。。
追答
对了你应该每次把num置0
#include
int main()
{
int k,i,j,n,b,hi[10000],t,sum=0;
while(scanf("%d%d",&n,&b)!=EOF)
{
sum=0;
for(i=0;ihi[k])
k=j;
t=hi[k];
hi[k]=hi[i];
hi[i]=t;
}
for(i=0;i=b)
{
printf("%d\n",i+1);//这里没有换行,已改
break;
}
}
if(i==n)
printf("impossible\n");//这里没有换行,已改
}
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询