codeforces
PTA
有一个星球,每年12个月,每月30天,每周5天。提供多组数据,给一个日期告诉你是周几,求另一个日期是周几。
Calendar是日历的意思,不知道题目为什么是Calandar,也许因为是另一颗星球?
参考思路:2019年第十届“浪潮杯”山东省大学生ACM程序设计竞赛–解题报告
一开始想的是用年月日之间间隔天数来算,后来看了网上大佬的思路,发现并不需要。
一周只有5天,一月30天,30%5==0,所以月年都能省略,只需要看日就可以了。
有两种情况,新日期在旧日期之前和之后,记得处理就行。
为了代码好写少写好理解一点,还可以进行轻微的简化
#include
using namespace std;
string s, cal[6] = {"", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
int T, y, d1, d2, res, d;
int main() {
cin >> T;
while (T--) {
cin >> y >> y >> d1 >> s;
cin >> y >> y >> d2;
for (int i = 1; i <= 5; i++) {
if (s == cal[i]) {
res = i;
break;
}
}
d = (d2 - d1) % 5;
if (d < 0) {
d += 5;
}
res = (res + d - 1) % 5 + 1;
cout << cal[res] << endl;
}
return 0;
}
#include
using namespace std;
string s, cal[6] = {"Friday", "Monday", "Tuesday", "Wednesday", "Thursday"};//将字符串下标0存“Friday”
int T, y, d1, d2, res, d;
int main() {
cin >> T;
while (T--) {
cin >> y >> y >> d1 >> s;
cin >> y >> y >> d2;
for (int i = 0; i <= 4; i++) {
if (s == cal[i]) {
res = i;
break;
}
}
d = (d2 - d1) % 5;
if (d < 0) {
d += 5;
}
res = (res + d) % 5;//5%5==0正好对应周五时的情况,代码会好写少写好理解一点点
cout << cal[res] << endl;
}
return 0;
}
#include
using namespace std;
string s, cal[6] = {"Friday", "Monday", "Tuesday", "Wednesday", "Thursday"};
int T, y, d1, d2, res, d;
int main() {
cin >> T;
while (T--) {
cin >> y >> y >> d1 >> s;
cin >> y >> y >> d2;
for (int i = 0; i <= 4; i++) {
if (s == cal[i]) {
res = i;
break;
}
}
d = (d2 - d1 + 30) % 5;//因为两日期最多差29天,所以加上30就能保证不会出现负数,就省去负数时的处理了
res = (res + d) % 5;
cout << cal[res] << endl;
}
return 0;
}
#include
using namespace std;
string s, cal[6] = {"Friday", "Monday", "Tuesday", "Wednesday", "Thursday"};
int T, y, d1, d2, res;
int main() {
cin >> T;
while (T--) {
cin >> y >> y >> d1 >> s;
cin >> y >> y >> d2;
for (int i = 0; i <= 4; i++) {
if (s == cal[i]) {
res = i;
break;
}
}
res = (res + d2 - d1 + 30) % 5;//合并写在一起好了,反正数据范围不大
cout << cal[res] << endl;
}
return 0;
}
#include
using namespace std;
string s, cal[6] = {"Friday", "Monday", "Tuesday", "Wednesday", "Thursday"};
int T, y, d1, d2, res;
int main() {
cin >> T;
while (T--) {
cin >> y >> y >> d1 >> s;
cin >> y >> y >> d2;
for (int i = 0; i <= 4; i++) {
if (s == cal[i]) {
res = i;
break;
}
}
cout << cal[(res + d2 - d1 + 30) % 5] << endl;//写进去拉倒
}
return 0;
}
#include
using namespace std;
string s, cal[6] = {"Friday", "Monday", "Tuesday", "Wednesday", "Thursday"};
int T, y, d1, d2;
int main() {
cin >> T;
while (T--) {
cin >> y >> y >> d1 >> s;
cin >> y >> y >> d2;
for (int i = 0; i <= 4; i++) {
if (s == cal[i]) {
cout << cal[(i + d2 - d1 + 30) % 5] << endl;//放进来就得了
break;
}
}
}
return 0;
}
#include
using namespace std;
string s, cal[6] = {"Friday", "Monday", "Tuesday", "Wednesday", "Thursday"};
int T, a, b;//就这么几个参数就行,其他都用不上
int main() {
cin >> T;
while (T--) {
cin >> b >> b >> a >> s;
cin >> b >> b >> b;
for (int i = 0; i < 5; i++) {
if (s == cal[i]) {
cout << cal[(i + b - a + 30) % 5] << endl;
break;
}
}
}
return 0;
}