阿迪看医生

【问题描述】

  这几天同学们总是对阿迪议论纷纷,这使得他很烦恼,似乎产生了一些抑郁,头也有点痛,打不起精神,他只好去看医生。然而,他只有去看过 n 个医生之后才能确诊病情,每个医生都需要上一个医生的诊断结果,因此他必须按顺序去预约每个医生,也就是说,他必须先去看医生1,然后再去看医生2,然后是医生3,等等。只有到最后一个医生那里才能确诊,且每天只能看一个医生。

  从今天开始,每个医生都有一个固定的出诊安排表,医生 i 在第 si 天看病人,然后在之后的每个第 di 天看诊。因此,他只在 si、si+di、si+2di、... 这些天工作。

  预约每个医生有些困难,他想知道看完所有医生至少需要多少天?

【输入形式】

   输入的第一行一个正整数 n ,表示医生的数量。

   接下来的 n 行,每行两个正整数 si 和 di,表示第 i 个医生的工作情况。

【输出形式】

   输出一行一个整数,表示阿迪看完最后一个医生的天数。

【样例输入】
3
2 2
1 2
2 2

【样例输出】

4

【样例说明】

第1位医生从第2天开始看病,然后在第4、6、8…天看诊

第2位医生从第1天开始看病,然后在第3、5、7…天看诊

第3位医生从第2天开始看病,然后在第4、6、8…天看诊

因此,阿迪可以在第2天去看第1位医生,然后在第3天去看第2位医生,第4天看第3位医生。

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	int a[n][2];   //定义二维数组a存储每位医生的si和di
	for(int x=0;x<n;x++)  //输入数据
	{
		for(int y=0;y<2;y++)
		{
			cin>>a[x][y];
		}
	}
	int time=a[0][0];  //定义看完全部医生的总天数time,赋第一个医生的天数值
	for(int i=1;i<n;i++)  //循环进行每个医生的看的情况判断
	{
		int t=1,ti=0;   //定义间隔次数t,进行过程中的医生看病天数ti
		if(a[i][0]>time) time=a[i][0];
		//当后续的医生开始看病的时间比看到前一个医生的总天数大时,直接赋值
		else  //当后续的医生开始看病的时间比看到前一个医生的总天数少时
		{
			while(1)  //永真循环
			{
				ti=a[i][0]+t*a[i][1];  //用ti记录医生看病天数
				if(ti>time)  //ti比看到前一个医生的总天数大时
				{
					time=ti;  //赋值
					break;  //跳出循环
				}
				else t++;   //否则,间隔加一,继续循环
			}
		}
	}
	cout<<time;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值