#include <stdio.h>
// 閏年
int Leap(int year) {
if (year % 400 == 0) return 1;
else if (year % 100 == 0) return 0;
else if (year % 4 == 0) return 1;
else return 0;
}
int DayMonth(int year, int month) {
if (month == 2) {
return Leap(year) ? 29 : 28;
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
// 月曜=0
int Zeller(int year, int month, int day) {
if (month == 1 || month == 2) {
month += 12;
year--;
}
int Y = year % 100;
int C = year / 100;
int weekday = ((day + (26 * (month + 1) / 10) + Y + Y / 4 + 5 * C + C / 4) + 5) % 7;
return weekday;
}
int main() {
int year, month;
int weekday = Zeller(year, month, 1); // その月の1日の曜日番号
int days = DayMonth(year, month); // その月の日数
printf("\n月曜 火曜 水曜 木曜 金曜 土曜 日曜\n");
// 空欄部分:カレンダー先頭の空白表示
// → 1日の曜日番号分だけ空白を表示(改行しない)
for (int i = 0; i < weekday; i++) { // ← ★空欄①:i < weekday
}
// 日付の表示ループ
for (int i = 1; i <= days; i++) { // ← ★空欄②:i <= days
printf("%4d", i
); // ← ★空欄③:%4dにすると綺麗
if (weekday == 6) { // ← ★空欄④:weekday == 6(=日曜)
}
weekday = (weekday + 1) % 7; // 曜日を1進めて、0~6の範囲に保つ
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyDplo/lubQKaW50IExlYXAoaW50IHllYXIpIHsKICAgIGlmICh5ZWFyICUgNDAwID09IDApIHJldHVybiAxOwogICAgZWxzZSBpZiAoeWVhciAlIDEwMCA9PSAwKSByZXR1cm4gMDsKICAgIGVsc2UgaWYgKHllYXIgJSA0ID09IDApIHJldHVybiAxOwogICAgZWxzZSByZXR1cm4gMDsKfQoKCmludCBEYXlNb250aChpbnQgeWVhciwgaW50IG1vbnRoKSB7CiAgICBpZiAobW9udGggPT0gMikgewogICAgICAgIHJldHVybiBMZWFwKHllYXIpID8gMjkgOiAyODsKICAgIH0gZWxzZSBpZiAobW9udGggPT0gNCB8fCBtb250aCA9PSA2IHx8IG1vbnRoID09IDkgfHwgbW9udGggPT0gMTEpIHsKICAgICAgICByZXR1cm4gMzA7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAzMTsKICAgIH0KfQoKLy8g5pyI5pucPTAKaW50IFplbGxlcihpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KSB7CiAgICBpZiAobW9udGggPT0gMSB8fCBtb250aCA9PSAyKSB7CiAgICAgICAgbW9udGggKz0gMTI7CiAgICAgICAgeWVhci0tOwogICAgfQogICAgaW50IFkgPSB5ZWFyICUgMTAwOwogICAgaW50IEMgPSB5ZWFyIC8gMTAwOwogICAgaW50IHdlZWtkYXkgPSAoKGRheSArICgyNiAqIChtb250aCArIDEpIC8gMTApICsgWSArIFkgLyA0ICsgNSAqIEMgKyBDIC8gNCkgKyA1KSAlIDc7CiAgICByZXR1cm4gd2Vla2RheTsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgeWVhciwgbW9udGg7CiAgICBwcmludGYoIuilv+aapuW5tOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhDogIik7CiAgICBzY2FuZigiJWQiLCAmeWVhcik7CiAgICBwcmludGYoIuaciOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhDogIik7CiAgICBzY2FuZigiJWQiLCAmbW9udGgpOwoKICAgIGludCB3ZWVrZGF5ID0gWmVsbGVyKHllYXIsIG1vbnRoLCAxKTsgICAgICAgICAvLyDjgZ3jga7mnIjjga4x5pel44Gu5puc5pel55Wq5Y+3CiAgICBpbnQgZGF5cyA9IERheU1vbnRoKHllYXIsIG1vbnRoKTsgICAgICAgICAgICAgLy8g44Gd44Gu5pyI44Gu5pel5pWwCgogICAgcHJpbnRmKCJcbuaciOabnCDngavmm5wg5rC05pucIOacqOabnCDph5Hmm5wg5Zyf5pucIOaXpeabnFxuIik7CgogICAgLy8g56m65qyE6YOo5YiG77ya44Kr44Os44Oz44OA44O85YWI6aCt44Gu56m655m96KGo56S6CiAgICAvLyDihpIgMeaXpeOBruabnOaXpeeVquWPt+WIhuOBoOOBkeepuueZveOCkuihqOekuu+8iOaUueihjOOBl+OBquOBhO+8iQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3ZWVrZGF5OyBpKyspIHsgICAgICAgICAgIC8vIOKGkCDimIXnqbrmrITikaDvvJppIDwgd2Vla2RheQogICAgICAgIHByaW50ZigiICAgICIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgfQoKICAgIC8vIOaXpeS7mOOBruihqOekuuODq+ODvOODlwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gZGF5czsgaSsrKSB7ICAgICAgICAgICAgIC8vIOKGkCDimIXnqbrmrITikaHvvJppIDw9IGRheXMKICAgICAgICBwcmludGYoIiU0ZCIsIGkpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyDihpAg4piF56m65qyE4pGi77yaJTRk44Gr44GZ44KL44Go57a66bqXCgogICAgICAgIGlmICh3ZWVrZGF5ID09IDYpIHsgICAgICAgICAgICAgICAgICAgICAgIC8vIOKGkCDimIXnqbrmrITikaPvvJp3ZWVrZGF5ID09IDbvvIjvvJ3ml6Xmm5zvvIkKICAgICAgICAgICAgcHJpbnRmKCJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyDml6Xmm5zjga7lvozjga/mlLnooYwKICAgICAgICB9CgogICAgICAgIHdlZWtkYXkgPSAod2Vla2RheSArIDEpICUgNzsgICAgICAgICAgICAgIC8vIOabnOaXpeOCkjHpgLLjgoHjgabjgIEw772eNuOBruevhOWbsuOBq+S/neOBpAogICAgfQoKICAgIHByaW50ZigiXG4iKTsKICAgIHJldHVybiAwOwp9