C细菌繁殖问题

C-细菌繁殖问题

(2019-3-18 一整天的数据结构课。)

问题描述

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

输入数据

第一行有整数n,表示测试数据的组数。其后n行每行有5个整数,整数之间用一个空格隔开。5个数分别表示第一天的月份、第一天的日期、第一天的细菌数目、要求那一天的月份、要求那一天的日期。已知第一天和要求的那一天在同一年并且该年不是闰年。那一天一定在第一天之后。

输出要求

对于每一组测试数据,输出一行,即要求那天的细菌数。

————————————————————————————————————————————

思考

int e[]={31,28,31,30,31,30,31,31,30,31,30,31};
这里想用借助一个12个元素的数组来记录一年各月份的天数。

经过一天,细菌增加一倍。

细菌数要乘2的t次幂,t表示经过的天数。
1.如果两个日期在同一个月,t只需日期数相减。
2.如果两个日期不同月份,t由三部分组成:
(1)第一天所在月份剩余的天数
(2)要求日期所在月份经过的天数
(3)中间月份经过的天数。(这里借助数组)

————————————————————————————————————————————

C代码如下

#include<stdio.h>
#include<math.h>

int main()
{
	int m,t;//组数 日子
	int a,b,c,d;long n;
    int e[]={31,28,31,30,31,30,31,31,30,31,30,31};
	while(scanf("%d",&m)!=EOF)
	{
		for(int i=0;i<m;i++)
		{
            scanf("%d%d%ld%d%d",&a,&b,&n,&c,&d);
            if(a>c||(a==c&&b>d)) printf("错误");
			else if(a==c&&b<=d)
			{
				t=d-b;
				n=(long)n*pow(2,t);
			}
			else//a
			{
				t=e[a-1]-b+d;
				for(int k=a+1;k<c;k++)
				{
					t=t+e[k-1];	
				}
				n=(long)n*pow(2,t);
			}
			printf("%d\n",n);
		}
	}
	return 0;
}
输出结果

C细菌繁殖问题_第1张图片

你可能感兴趣的:(C细菌繁殖问题)