虫子爬井(有待改进)

/*
虫子在n英寸深的井底,每一分钟爬u英寸,爬下一次要休息一分钟,
在休息的时候虫子会往下滑d英寸,求多长时间虫子能爬出洞口?
在此过程中,分数的小数部分向上取整(其实我没看懂这句话是啥意思)
如果攀爬结束时虫子正好到达井的顶端,视为虫子已经爬出
假定d<u,n<100,当n=0时输入结束
[输入形式]
输入多个测试样例(我觉得这里最难)每行包括3个正整数n,u,d
[输出形式]
每个测试用例对应的结果输出一行,表示虫子爬出的时间。
[样例输入]
10 2 1
20 3 1
0 0 0
[样例输出]
17
19
[思路(这个思路较为清奇)] 
其实我也不咋会算爬虫的时间,只是模拟了一下爬虫的运动。
然后那个输入的那个我参照了输入一组数据,求里面的最大值最小值的想法,
就是直接先输入一组数据:n,u,d,然后算出来这个虫子需要多长时间,
把这个时间存到数组b里面,最后输出数组b即可。 
于是乎就只用申请元素为3个的数组a[3],a[0]表示n,a[1]表示u,a[2]表示d 
就要判断一下 a[0]是不是等于0来结束输入,
当a[0]等于0的时候再象征性的让它能输入两个剩下的0就可以了,要不然会崩2333 
最后输出数组b即可。 
*/
#include <iostream>
using namespace std;

int main()
{
/*声明变量need表示爬虫需要爬的时间,
变量pa表示爬虫爬的距离,
变量sum表示总共有多少只虫子 */ 
	int need=0,pa=0,i,sum=0;
	int a[3];
	int b[100];
	for(i=0;i<100;i++)
	{
//初始化数组b,让数组b里面每一个值等于0,方便之后做输出数组b的判断停止条件 
		b[i]=0;
	}
	cin>>a[0];
	while(a[0]!=0)//当a[0]即n!=0时继续输入 
	{
		sum++;//表示一条虫子生成 
		cin>>a[1]>>a[2];//再输入a[1](即u)和a[2](即d) 
		while(pa<a[0])//当虫子没爬出来的时候的循环,我觉得用while最方便2333 
		{
			pa=pa+a[1];//虫子往上爬 
			need++;//时间加一分种 
//这时判断虫子是否已经爬出,不要等算最后的距离,因为虫子有可能是在上行过程中就爬出了井
			if(pa==a[0]||pa>a[0]) 
			break;//如果已经爬出,break,终止这条虫子的运动 
			else//否则,虫子下滑 
			{
				pa=pa-a[2];//虫子往下滑 
				need++;//时间加一分种 
			}
		}
//储存最后需要的时间,因为数组b是从0开始(比虫子数少1),所以要sum-1
		for(i=sum-1;i<=sum-1;i++) 
		{
			b[i]=need;
		}
		cin>>a[0];//输入下一组数据 
		need=0;//新的虫子,当然要从新开始,于是爬行距离pa和爬行时间need都从0开始 
		pa=0;
	}
	cin>>a[2]>>a[3];//象征性输入结束的两个0 
//刚才初始化数组b此时派上了用场,当遇到了0,也就是说没存数据,也就是说总的虫子用完了
	for(i=0;b[i]!=0;i++) 
	{
		cout<<b[i]<<endl;
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/include_645829461/article/details/78846656
今日推荐