原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1408
分析:先求出有多少滴水,再加上停滴的时间就好了。注意V,D可以是实数。
我的代码:
#include<stdio.h>
#define Max 1000
int a[Max+10];
int main()
{
double V,D;
int i;
for(i=0;i<=Max;i++) a[i]=0;
for(i=1;i<=Max;i++) a[i]=a[i-1]+i; //算的第i次滴水后,一共滴了多少滴水。
while(~scanf("%lf%lf",&V,&D))
{
int time=0;
int d=V/D;
if(D*d<V) d++; //加少最后一滴不满 D ml的水。
time=d; //一共有d滴水。
for(i=1;i<=Max;i++)
{
if(d>a[i]) time++; //加上停滴时间。
else break;
}
printf("%d\n",time);
}
return 0;
}
总结:交了7次代码,WA了5次,超时一次,第一次超时就明白输入有实数了,最面一直WA,晕死了(╰_╯)#。
最后发现时求水滴的地方有错,之前一直是有一个for,枚举水滴的个数
for(d=1;d<1000l;d++)
{
if(d*D>=V) break;
}
time=d;//一共有d滴水。
不知道为什么当时会有这么奇葩的想法,这样去求水滴的个数╮(╯▽╰)╭,想想这方法肯定是错的,如果D小点水滴数超出循环上界是可以的(此处上界是1000)。。