AOJ 3.Redraiment的遭遇

167

打表

要注意不到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;
}
发布评论
  • 点击查看/关闭被识别为广告的评论