解题思路:
使用蔡勒公式计算。蔡勒公式是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1,各字母表示的意思网上可以找到。
注意事项:
千千万万不要忘了w小于0的情况,虽然我试了几十组数据没有发现一个w小于0的例子。导致提交了很多次,都是“答案错误”或者是“答案错误18%”。
以下代码是提交多次都没有正确后,一气之下想把每一个数字算出来,供我看的。其实用不着这么冗长的结构的。
参考代码:
while (scanf_s("%d %d %d", &year, &m, &d) == 3)
{
if (m == 1 || m == 2)
{
year = year - 1; m = m + 12;
c1 = year / 1000;
c2 = year / 100 % 10;
y1 = year / 10 % 10;
y2 = year % 10;
c = c1 * 10 + c2;
y = y1 * 10 + y2;
X = (y / 4);
Y = (c / 4);
Z = (26 * (m + 1) / 10);
w = (y + X + Y - 2 * c + Z + d - 1) % 7;
printf("%d %d %d %d %d\n", c, y, X, Y, Z);
if (w < 0) printf("%d", w + 7);
else if (w == 0) printf("7\n");
else printf("%d\n", w);
}
else
{
......
}
}
return 0;
}
0.0分
2 人评分