回答編集履歴

1

コードの変更

2019/08/04 12:49

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -1,3 +1,9 @@
1
+ display を、月を横にいくつ表示するかという意味に解釈しました。
2
+
3
+ 最初に、12の約数だけ有効なコードを示しましたが、
4
+
5
+ 5 や 7 などでもよいようにしてみました。
6
+
1
7
  ```C
2
8
 
3
9
  //カレンダーを表示する
@@ -8,33 +14,25 @@
8
14
 
9
15
  {
10
16
 
11
- int month; // 月のループ
12
-
13
- int row; // 週のループ
14
-
15
- int col; // 曜日のループ
16
-
17
-
18
-
19
17
  printf("%5d年\n", year); // 入力された年を表示
20
18
 
21
- for (month = JAN; month < N_MONTH; month += display) {
19
+ for (int month = JAN; month < N_MONTH; month += display) {
22
20
 
23
- for (int k = 0; k < display; k++)
21
+ for (int m = month, k = 0; m < N_MONTH && k < display; k++, m++)
24
22
 
25
- printf("%16d月 ", month + k + 1);
23
+ printf("%16d月 ", m + 1);
26
24
 
27
25
  printf("\n\n");
28
26
 
29
27
 
30
28
 
31
- for (int k = 0; k < display; k++) {
29
+ for (int m = month, k = 0; m < N_MONTH && k < display; k++, m++) {
30
+
31
+ if (k) printf(" ");
32
32
 
33
33
  for (int i = 0; i <= SAT; i++)
34
34
 
35
35
  printf(" %2s ", weeks[i]); //曜日の表示
36
-
37
- printf(" ");
38
36
 
39
37
  }
40
38
 
@@ -42,13 +40,13 @@
42
40
 
43
41
 
44
42
 
45
- for (row = 0; row < ROW_SIZE; row++) {
43
+ for (int row = 0; row < ROW_SIZE; row++) {
46
44
 
47
- for (int k = 0; k < display; k++) {
45
+ for (int m = month, k = 0; m < N_MONTH && k < display; k++, m++) {
48
46
 
49
- int m = month + k;
47
+ if (k) printf(" ");
50
48
 
51
- for (col = 0; col <= SAT; col++) {
49
+ for (int col = SUN; col <= SAT; col++) {
52
50
 
53
51
  if (calendar[m][row][col] != 0) { // 日数が0でないなら
54
52
 
@@ -78,8 +76,6 @@
78
76
 
79
77
  }
80
78
 
81
- printf(" ");
82
-
83
79
  }
84
80
 
85
81
  printf("\n");