1408 盐水的故事-----一个值得研究的问题

Posted Wally的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1408 盐水的故事-----一个值得研究的问题相关的知识,希望对你有一定的参考价值。

Problem Description
挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下;然后滴二滴,停一下;再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速度是一秒(假设最后一滴不到D毫升,则花费的时间也算一秒),停一下的时间也是一秒这瓶水什么时候能挂完呢?
 

 

Input
输入数据包含多个测试实例,每个实例占一行,由VUL和D组成,其中 0<D<VUL<5000。
 

 

Output
对于每组测试数据,请输出挂完盐水需要的时间,每个实例的输出占一行。
 

 

Sample Input
10 1
 

 

Sample Output
13

 这个问题有需要注意的地方:

题目没有说明是整数所以要用双精度来做

但是做的方法还是有所不同的

我的代码:

技术分享
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <stdio.h>
 4 #include <math.h>
 5 #include <string.h>
 6 #include <time.h>
 7 using namespace std;
 8 
 9 int main()
10 {
11     double num,d,j;
12     int k,i,t;
13     while(cin>>num>>d)
14     {
15         j=num/d;
16         t=j;
17         num=t;
18         if(num!=j)
19         k=t+1;
20         else
21         k=t;
22         for(i=sqrt(k);;i++)
23         {
24             if(i*(i-1)/2<k&&i*(i+1)/2>=k)
25             break;
26         }
27         cout<<k+i-1<<endl;
28     }
29     return 0;
30 }
View Code

其他的代码

技术分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #define eps 1e-8
 4 using namespace std;
 5 int main(){
 6     double d,vul;
 7     int k,t;
 8     while(scanf("%lf%lf",&vul,&d)!=EOF){
 9         k=1;t=0;
10         while(vul-k*d>eps){//滴完为止
11             t+=k+1;
12             vul-=k*d;
13             k++;
14         }
15         if(vul-int(vul/d)*d<eps)
16             t+=vul/d;
17         else t+=vul/d+1;
18         printf("%d\n",t);
19     }
20     return 0;
21 }
View Code

问题代码

技术分享
 1 #include<stdio.h>
 2 int main()
 3 {
 4     double v,d;
 5     int count,i,j;
 6     while(~scanf("%lf%lf",&v,&d))
 7     {
 8         count=0;i=1;
 9         while(v>0.0)
10         {
11             if(i>1)count++;
12             for(j=1;j<=i;j++)
13             {
14                 if(v>0.0)
15                 {
16                     v-=d;
17                     count++;
18                 }    
19             }
20             i++;
21             //printf("%lf   %d\n",v,count);
22         }
23         printf("%d\n",count);
24     }
25     return 0;    
26 }
View Code

这是一个AC的代码,但是问题就在这里了  我们用11 和1 输入    答案是15s   但是我们同时缩小  输入1.1和0.1   得到的答案就是16了
然后我把这个问题修正了以后就WA了........

修改以后

技术分享
 1 #include<stdio.h>
 2 int main()
 3 {
 4     double v,d;
 5     int count,i;
 6     while(~scanf("%lf%lf",&v,&d))
 7     {
 8         count=0;i=1;
 9         while((v-d*i)>0.0)
10         {
11             v-=d*i;
12             count+=i;
13             i++;
14             count++;
15             //printf("%lf   %d\n",v,count);
16         }
17         while(v>0.0)
18         {
19             v-=d;
20             count++;
21             printf("%lf\n",v);
22         }
23         //printf("%d\n",count);
24     }
25     return 0;    
26 }
View Code

这个问题还没完全弄懂。。。。。

以上是关于1408 盐水的故事-----一个值得研究的问题的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1408盐水的故事

题解报告:hdu 1408 盐水的故事

6J - 盐水的故事

国外 | 故事代入:Prometheus Fuels

淡盐水的功效

在 Spark 数据导入中的一些实践细节