问题描述
一种细菌的繁殖速度是每天成倍增长。例如: 第一天有 10 个,第二天就变成 20 个,第三天变成 40 个,第四天变成 80 个,......。现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。
输入
第一行有一个整数 n,表示测试数据的数目。其后 n 行每行有 5 个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在整数范围内。
输出
对于每一组测试数据,输出一行,该行包含一个整数,为要求的一天的细菌数。
输入样列
2
1 1 1 1 2
2 28 10 3 2
输出样例
2
40
算法实现
using System;
namespace Questions{
class Program{
public static void Main(string[] args){
int[] day = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int n = int.Parse(Console.ReadLine());
while (n > 0) {
n--;
string input = Console.ReadLine();
string[] data = input.Split(' ');
int moonStart = int.Parse(data[0]);
int moonEnd = int.Parse(data[3]);
int dayStart = int.Parse(data[1]);
int dayEnd = int.Parse(data[4]);
int num = int.Parse(data[2]);
int daySum = 0;
//计算天数daySum
if (moonStart == moonEnd)
daySum = dayEnd - dayStart;
else {
daySum = day[moonStart - 1] - dayStart;
for (int i = moonStart + 1; i < moonEnd; i++)
daySum += day[i - 1];
daySum += dayEnd;
}
Console.WriteLine((Math.Pow(2,daySum)*num));
}
Console.ReadKey();
}
}
}