1.德尔塔毒株的传播速度很快,XX国感染人数猛增致大量企业停工。我们假设德尔塔毒株的繁殖速度是每天成倍增长。
例如:第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,……。
现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。
Input
第一行有一个整数n,表示测试数据的数目。其后n行每行有5个整数,整数之间用一个空格隔开。
第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,
第四个数表示要求的那一天的月份,第五个数表示
要求的那一天的日期。
已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在整数范围内。
【题解】
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
const int Max = 1e3;
//求日期
//求指数
int s[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int n; //组数
cin>>n;
int m1[Max], d1[Max], m2[Max], d2[Max];
long data1[Max];
for(int i = 0; i < n; i ++) {
int sum = 0;
long data; //每一组求得的结果
cin>>m1[i]>>d1[i]>>data1[i]>>m2[i]>>d2[i];
if(m1[i] == m2[i]){
sum = d2[i] - d1[i];
}
else if((m1[i] + 1) == m2[i]){
sum = s[m1[i] - 1] - d1[i] + d2[i];
}
else{
for(int j = m1[i] - 1; j < m2[i] - 1; j ++){
sum += s[j];
}
sum = sum - d1[i] + d2[i];
}
//cout<<sum<<endl;
data = data1[i]*pow(2,sum);//把求得的时间差用来计算细菌增长结果
cout<<data<<endl;
}
return 0;//1 1 1 1 1 29
}
2.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个。
//以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,发现只剩下一个桃子了。编写程序求猴子第一天摘了多少个桃子。
【题解】本题重点是反过来思考问题
#include <stdio.h>
int main()
{
int day, x1, x2; /*定义 day、x1、x2 3 个变量为基本整型*/
day = 9;
x2 = 1;
while(day > 0)//while 语句由后向前推出第一天摘的桃子数。
{
x1 = (x2 + 1) * 2; /*第一天的桃子数是第二天桃子数加1后的2倍*/
x2 = x1;
day--; /*因为从后向前推所以天数递减*/
}
printf("the total is %d\n", x1); /* 输出桃子的总数*/
return 0;
}
#include<stdio.h>
//返回第n天时的桃子数
int func(int n)
{
if (n >= 10)
{
return 1;
}
else
{
return (func(n + 1) + 1) * 2;// 当天桃子数 = (后一天桃子数 + 1)* 2;
}
}
int main()
{
int i;
for (i = 1; i <= 10; i++)
{
printf("第 %d 天桃子数:%d \n", i, func(i));
}
getchar();
return 0;
}