問題描述
一種細菌的繁殖速度是每天成倍增長。 例如: 第一天有 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;
}