爬动的蠕虫(经典模拟)

文章讲述了如何使用C++编程语言解决关于蠕虫爬出井的问题,涉及模拟算法,包括爬升、休息和下滑的动态过程,以及如何通过while和for循环计算所需的时间。
摘要由CSDN通过智能技术生成

描述

一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?(不足一分钟按一分钟计)

这里给出多个测试数据,每个数据占一行。输入在一行中顺序给出3个正整数N(井深)、U(在镜中每分钟向上爬的距离)、D(休息时滑下的距离),假定D<U,N不超过100。

样例输入

10 2 1

20 3 1

0 0 0

样例输出

17

19

这道题真的是一道经典的模拟,首先我们要记住S=vt然后我们可以画图去解决这个问题。首先我们要先用while输入,然后我的办法是建立一个函数,然后设立个s = 0(爬行距离),time = 0.由于它爬一分钟就休息一分钟,所以我们要先建立个for循环 for(int i = 0;s <= n;i ++),这里条件用距离比较就行了,这里的i相当于时间表示。

话不多说,直接上代码

#include <iostream>
using namespace std;
int idx = 0,q,w,e;
void ss(int n,int m,int k);

int main(){
	while(cin >> q >> w >> e && q != 0){
		ss(q,w,e);
	}
	
	return 0;
}
void ss(int n,int m,int k){
	int s = 0;
	int time = 0;
	for (int i = 0; s < n;i ++){
		if ((i % 2) == 1){
			s -= k;
			time ++;
		}
		else if ((i % 2) == 0){
			time ++;
			s += m;
		}
	}
	cout << time << endl;
	return ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值