Description
挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下;然后滴二滴,停一 下;再滴三滴,停一下…,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速度是一秒(假设最后一滴不到D毫升,则花费的时间也 算一秒),停一下的时间也是一秒这瓶水什么时候能挂完呢?
Input
输入数据占一行,由VUL和D组成,其中0< D< VUL< 5000。
Output
请输出挂完盐水需要的时间。
Sample Input
10 1
Sample Output
13
题解:这是一道简单的从一加到N的问题,但是中间有个间隔,并且会有一个非整数然后
取整的那么一个过程,1+2+3+~~+N=(N+1)*N/2,所以题目中的推导出来的
公式应该是2*S=N*N+3*N.
#include<iostream>
using namespace std;
int fun(int VUL,int D)
{
int i=0;
int s=0;
if((VUL*1000)/D-(VUL/D)*1000!=0)//重点:这里的那个精度一定要取大一点,1000或者一万都行,开始我就是取成了10一直过不了
{
s=VUL/D+1;
}
else
s=VUL/D;
while(i*i+i<2*s)
{
i++;
}
return s+i-1;
}
int main()
{
int VUL,D;
cin>>VUL>>D;
if(VUL<D)
{
int temp=D;
D=VUL;
VUL=temp;
}
int time=fun(VUL,D);
cout<<time<<endl;
return 0;
}