打表
要注意不到7月前和8月后的情况
同时注意“0号”等特殊情况
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; #define REP(n) for(int o=0;o<n;o++) //bool first = true; int main() { bool a[2][32];//是否停电 memset(a, 0, sizeof(a)); //停电日期打表 int i = 1; bool *it = &a[0][1]; bool first_8 = true; while (1) { if (it > &a[1][31]) break; if (it >= &a[1][0] && first_8 == true) { first_8 = false; it++; } *it = true; it += ++i; } //日历输出调试 /** for (int i = 0; i < 2; i++) { printf("%d\n", i + 7); for (int j = 1; j < 32; j++) { printf("%3d(%d) ", j, a[i][j]); if (j % 7 == 0)printf("\n"); } printf("\n"); } /**/ //输出 int m, d; scanf("%d/%d", &m, &d); while (m != 0 && d != 0) { /* if (!first) printf("\n"); first = false; */ //月份不在7、8月 if (m < 7) { printf("10\n"); scanf("%d/%d", &m, &d); continue; } if (m > 8) { printf("0\n"); scanf("%d/%d", &m, &d); continue; } int cnt = 0; for (bool *i = &a[m - 7][d]; i <= &a[1][31]; i++) { if (i == &a[1][0]) continue; if (*i == true) cnt++; } printf("%d\n", cnt); scanf("%d/%d", &m, &d); } return 0; }