求为啥会错了!
问题 A: 日历输出内存限制:512 MB
时间限制:1.000 S
评测方式:文本比较
命题人:外部导入
提交:217
解决:34
题目描述
已知2007年1月1日为星期一。
设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印。
为完成此函数,设计必要的辅助函数可能也是必要的。其中输入为年份和月份。
比如输入2007 1
则输出为
---------------------
Su Mo Tu We Th Fr Sa
---------------------
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
---------------------
输入
输入数据包含多组,每组有两个整数m,n。m(m > 2007)表示年份,n表示月份,输入数据保证合法。
输出
对于每组输出数据,按照题目中的格式输出,日历中每个数字占三列。
样例输入 复制
2010 9
样例输出 复制
---------------------
Su Mo Tu We Th Fr Sa
---------------------
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
---------------------
提示
短线“-”个数要与题目中一致,否则系统会判为错误。输出时每个数字占三列,再强调一次。
#include<bits/stdc++.h>
using namespace std;
int yy[9999] = {0};
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int pdrn(int s) {
if (s % 4 == 0 && s % 100 != 0) {
return 1;
}
}
int ms(int g) {
int sss = 0;
if (g == 1) {
return 31;
} else {
int sss = 31;
sss += m[g];
g--;
}
return sss;
}
long long nts(int n) {
long long sum = 0;
for (int i = 2007; i <= n - 1; i++) {
sum += yy[i];
}
return sum;
}
int main() {
int n, y;
cin >> n >> y;
if (pdrn(n)) {
m[2 + 1] = 29;
}
for (int i = 2007; i <= n - 1; i++) {
if (pdrn(i) == 1) {
yy[i] = 366;
} else {
yy[i] = 365;
}
}
int ks = (ms(y) + nts(n)) % 7;
cout << "---------------------" << endl;
cout << "Su Mo Tu We Th Fr Sa" << endl;
cout << "---------------------" << endl;
for (int i = 1; i <= ks; i++) {
cout <<" ";
}
int f = 0;
for (int i = 1; i <= 7 - ks; i++) {
//cout <<i<<" ";
printf("%3d",i);
f = i;
}
cout<<endl;
for (int i = f + 1; i <= m[y] - f; i++) {
//cout << i <<" ";
printf("%3d",i);
if ((i - f) % 7 == 0) {
cout << endl;
}
}
return 0;
}