淘淘捡西瓜
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lld
Description
地上有一排西瓜,每个西瓜都有自己的重量。淘淘有一个包,他从第一个西瓜开始捡。因为淘淘很贪心,所以他每看到一个西瓜就会捡起来。如果当前的西瓜超过的包的容量,那么淘淘就不会再捡了(包括后面的所有西瓜)。请问他能捡多少个?
Input
包含多组测试数据,每组测试数据占两行。
第一行两个正整数N,M,表示有N个西瓜,背包容量是M。
第二行包括N个正整数,表示从第一个到最后一个西瓜的重量。
Output
每组测试数据输出占一行,每行输出1个整数,表示捡了多少西瓜。
Sample Input
5 10 1 2 3 4 5 5 10 5 4 3 2 1
Sample Output
4 2
题目分析:
看起来倒不是很难……
但是会有 BUG!!!
(关于后面都不会捡的 bug )
错误代码:
#include<stdio.h>
int main()
{
int n,m,i,k,w,sum;
while(scanf("%d %d",&n,&m)!=EOF)
{
k=0;
sum=0;
for(i=1;i<=n;i++)
{
scanf("%d",&w);//捡到一个西瓜
if(k+w<=m)//背包仍然放得下
{
k += w;
sum++;
}
else
break;
}
printf("%d\n",sum);
}
return 0;
}
实验数据:
5 1
1 2 3 4 5
就会出问题。。。
正确代码:
#include<stdio.h>
int main()
{
int n,m,i,k,w,sum;
while(scanf("%d %d",&n,&m)!=EOF)
{
k=0;
sum=0;
for(i=1;i<=n;i++)
{
scanf("%d",&w);//捡到一个西瓜
if(k+w<=m)
{
k += w;
sum++;
}
else
{
k=m+1;//永远放不下,但仍然录入
}
}
printf("%d\n",sum);
}
return 0;
}