0015-细菌繁殖

问题描述

一种细菌的繁殖速度是每天成倍增长。例如: 第一天有 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();
        }
    }
}

你可能感兴趣的:(0015-细菌繁殖)