ACM-细菌繁殖

问题描述

        一种细菌的繁殖速度是每天成倍增长。 例如: 第一天有 10 个,第二天就变成 20 个,第三天变成 40 个,第四天变成 80 个, ……。现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。

输入数据

       第一行有一个整数 n,表示测试数据的数目。其后 n 行每行有 5 个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在整数范围内。

输出要求

        对于每一组测试数据,输出一行,该行包含一个整数,为要求的一天的细菌数。

输入样例

2
1 1 1 1 2
2 28 10 3 2

输出样例

2
40

解题思路

        这题实际上是求给定的两天之间间隔的天数 n,第一天的细菌数乘以 2 的 n 次方就是题目的答案。每个月的天数因为不很规则,如果在程序中用规则描述会比较麻烦,所以可以使用一个数组将每个月的天数存起来。整个计算过程可以描述如下:

读入测试样例数 n;

1. 读入两个日期及第一天的细菌数;
2. 将两个日期转换为当年的第几天;
3.得到两个天数的差,即它们中间间隔的天数 m;
4.用第一天的细菌数乘以 2 的 m 次方等到 x;
5. 输出 x;

参考程序

#include <iostream>
using namespace std;
int month[]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int main()
{
	int times;
	int mon1,date1,mon2,date2,num1;
	cin>>times;
	while(times--){
		//起止日期的月份和日期。
		cin>>mon1>>date1>>num1>>mon2>>date2;
		int days = date2 - date1;
		//计算天数 
		for(int i=mon1;i<mon2;i++){
			days += month[i];
		}
		long num = num1;
		//num乘以2的days次方
		for(int j=0;j<days;j++){
			num *= 2;
		}
		cout<<num<<endl;
	}
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值