#include <iostream> #include <vector> using namespace std; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};//平年月份天数数组 int b[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年月份天数数组 typedef pair<int,int> PII; vector<PII> A;//动态数对 int main() { //格式化输入获取当前年月日 int year,month,day; scanf("%4d/%2d/%2d",&year,&month,&day); int n,m; cin>>n>>m; for(int i = 1;i <= m;i ++ ) { //注意key的值即为偏移量的值我们直接按照下标作为偏移量存储 int key=i-1; int num; cin>>num; A.push_back({key,num});//存进去 } int delta=-m;//默认动态数对中的数据是没有病例出现的,此时偏移量为m for(int i = 0;i < A.size();i ++ ) { //如果查找到了病例出现的那天 if(A[i].second!=0) { delta=-A[i].first;//更新偏移量的值 break;//直接跳出循环 } } n=n+delta;//n与偏移量进行处理 if((year%4==0&&year%100!=0)||year%400==0)//闰年 { while(n--)//累加天数 { day++; if(day>b[month])//注意月份进位 { month++; day=1; } if(month>12)//注意年份进位 { year++; month=1; } } } else//平年 { while(n--)//累加天数 { day++; if(day>a[month])//注意月份进位 { month++; day=1; } if(month>12)//注意年份进位 { year++; month=1; } } } //输出最早解封的日期 printf("%4d/%02d/%02d",year,month,day); return 0; } 改为C语言
时间: 2024-03-16 18:44:50 浏览: 101
下面是将该代码改为 C 语言的过程:
```c
#include <stdio.h>
#define bool int
#define true 1
#define false 0
int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 平年月份天数数组
int b[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 闰年月份天数数组
typedef struct Pair {
int first;
int second;
} PII;
PII A[100005]; // 动态数对,假设最多有 100000 个数据
int main() {
int year, month, day;
scanf("%4d/%2d/%2d", &year, &month, &day);
int n, m;
scanf("%d %d", &n, &m);
int i;
for (i = 1; i <= m; i++) {
int key = i - 1; // 注意key的值即为偏移量的值我们直接按照下标作为偏移量存储
int num;
scanf("%d", &num);
A[i-1].first = key;
A[i-1].second = num;//存进去
}
int delta = -m; // 默认动态数对中的数据是没有病例出现的,此时偏移量为m
for (i = 0; i < m; i++) {
// 如果查找到了病例出现的那天
if (A[i].second != 0) {
delta = -A[i].first; // 更新偏移量的值
break; // 直接跳出循环
}
}
n = n + delta; // n与偏移量进行处理
if((year%4==0&&year%100!=0)||year%400==0) { // 闰年
while(n--){ // 累加天数
day++;
if(day>b[month]){ // 注意月份进位
month++;
day=1;
}
if(month>12){ // 注意年份进位
year++;
month=1;
}
}
}
else{ // 平年
while(n--){ // 累加天数
day++;
if(day>a[month]){ // 注意月份进位
month++;
day=1;
}
if(month>12){ // 注意年份进位
year++;
month=1;
}
}
}
// 输出最早解封的日期
printf("%4d/%02d/%02d", year, month, day);
return 0;
}
```
注:本人尽力确保了代码的正确性,但由于篇幅有限,可能存在未发现的错误,望批评指正。
阅读全文