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;
}
發佈了80 篇原創文章 · 獲贊 34 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章