题目描述
在一个盒子里有一只猫。之后盒子内有 50% 的概率释放出毒气杀死这只猫,同时有 50% 的概率猫将活下来。
盒子里必将发生这两个结果之一,而外部观测者只有打开盒子才能知道里面的结果。
当盒子处于关闭状态,整个系统则一直保持不确定性的波态,即猫生死叠加。
为了完成这个实验,我们必须精准的控制释放毒气的概率,所以我们通过放射性物质的衰变来控制毒气释放。
然而,放射性物质的衰变可能是个很漫长的过程,薛定谔显然没有足够的时间去等待,所以他打算直接到未来去了解实验的结果。
通过时间跳跃,可以让薛定谔来到接下来最近的某一年的同一个日子,这个日子的星期数和今天一样。
比如今天是 8 月 16 日,星期三。下一个也是星期三的 8 月 16 日发生在 2023 年。
现在是日期是 yyyy-mm-dd,我们希望你求出薛定谔会跳跃到那一年。
输入
第一行为 T,表示输入数据组数。
每组数据包含一个日期,格式为 YYYY-MM-DD。
1 ≤ T ≤ 10000
YYYY ≥ 2017
日期一定是个合法的日期
输出
对每组数据输出答案年份,题目保证答案不会超过四位数。
样例输入
1
2017-08-16
样例输出
2023
#include<bits/stdc++.h>
using namespace std;
int M[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
int y , m , d , ans = 0;
int T;
cin>>T;
while(T--){
scanf("%d-%d-%d",&y,&m,&d);
int w=1;//设今天星期一
int t1=m;
int t2=d;
int t3=w;
while(1){
if(y%400==0 || (y%4==0&&y%100!=0)){
M[2] = 29;
}
else{
M[2] = 28; //这个必须加,因为M为全局变量
}
d++;
w = (w + 1) % 7;//w为0为星期天
if(d > M[m]){
d = 1;
m ++;
}
if(m>12){
m = 1;
y ++;
}
if(t1==m&&t2==d&&t3==w){
ans = y;
break;
}
}
cout << ans << endl;
}
return 0;
}