问题描述
小明所在的城市发生了疫情,实行静态化管理,小明也被关在家里,不能去上学了。
根据当地政策,连续N天没有新增病例,就可以解封。小明知道过去M(M≤N)天的每天的新增病例数,他想知道理想情况下最早什么时候可以解封。
输入格式:
第一行一个日期,格式为YYYY/MM/DD。
第二行两个整数N和M,0
之后M行,每行一个整数0≤Xi≤100,0≤i
输出格式:
一行,一个日期,格式为YYYY/MM/DD,请不要有多余的空格。
#include
//判断是否是闰年;
bool runnian(int year){
if(year%4==0&&year%100!=0||year%400==0){
return 1;
}
return 0;
}
//判断这个月的类型;
int judgeMonth(int month,int year){
if(month==1||month==3||month==5||month==7||month==8||month==10){
return 1;
}//表示大月;
else if(month==4||month==6||month==8||month==10||month==12){
return 0;
}//表示小月;
else if(month==2&&runnian(year)){
return 2;
}//表示有29天的二月;
else if(month==2&&!runnian(year)){
return 3;
}//表示有28天的二月;
}
//打印日期;
void printDate(int year,int month,int day,int kuashi){
int flag=judgeMonth(month,year);
while(flag==1&&kuashi+day>31||flag==0&&kuashi+day>30||flag==2&&kuashi+day>29||flag==3&&kuashi+day>28){
//将跨时减去本月的剩余时间
switch(flag){
case 0:kuashi=kuashi-(30-day);break;
case 1:kuashi=kuashi-(31-day);break;
case 2:kuashi=kuashi-(29-day);break;
case 3:kuashi=kuashi-(28-day);break;
}
day=0;
//判断下一个月是几月;
if(month<12){
month++;
}
else{
month=1;
year++;
}
//判断下一个月的类型
flag=judgeMonth(month,year);
}
printf("%04d/%02d/%02d",year,month,day+kuashi);
}
int main(){
int year,month,day;
int N,M;
int bingli;
//从今天至以往K天都没有病例;
int k=0;
scanf("%d/%d/%d",&year,&month,&day);
scanf("%d %d",&N,&M);
int flag=1;
for(int i =0;i < M;i ++){
scanf("%d",&bingli);
if(bingli==0&&flag==1){
k++;
}
else{
flag=0;
}
}
int kuashi=k+N;
printDate(year,month,day,kuashi);
}