回答編集履歴
2
抜かした while 行を戻した
answer
CHANGED
@@ -62,6 +62,7 @@
|
|
62
62
|
すればよいのです。上記コードは次のように整理できます。
|
63
63
|
|
64
64
|
```C
|
65
|
+
while (fgets(line, LINESIZE, fp) != NULL) {
|
65
66
|
sscanf(line, "%c %c %d:%d", &b, &io, &h, &m);
|
66
67
|
int n = 「bが 'A'なら0, 'B'なら1, … にする」 ;
|
67
68
|
|
@@ -69,6 +70,7 @@
|
|
69
70
|
case 'I': tm[n] += 60 * h + m; break;
|
70
71
|
case 'O': tm[n] -= 60 * h + m; break;
|
71
72
|
}
|
73
|
+
}
|
72
74
|
```
|
73
75
|
配列を使えば、行数を減らすことができ、見通しが良くなったと思いませんか。ボート毎の変数を**添え字変数 n で特定できる**(`` tm[n] ``)からです。
|
74
76
|
|
1
=> を矢印(→)に書換え
answer
CHANGED
@@ -95,7 +95,7 @@
|
|
95
95
|
- ボート名 b は(先頭を0番目として)"ABCDEFGHIJKLMNO" の何番目にあるか?
|
96
96
|
|
97
97
|
こういうことかもしれません。例えば、boat2num() という変換関数を作っておき、
|
98
|
-
```
|
98
|
+
```C
|
99
99
|
int boat2num(char b)
|
100
100
|
{
|
101
101
|
int n;
|
@@ -122,9 +122,9 @@
|
|
122
122
|
```
|
123
123
|
この一行だけで十分なのです。検算してみます。
|
124
124
|
|
125
|
-
- b == 'A' なら 'A' - 'A'
|
125
|
+
- b == 'A' なら 'A' - 'A' → 0 (即ち n = 0; と同じ)
|
126
|
-
- b == 'B' なら 'B' - 'A'
|
126
|
+
- b == 'B' なら 'B' - 'A' → 1 (即ち n = 1; と同じ)
|
127
|
-
- b == 'C' なら 'C' - 'A'
|
127
|
+
- b == 'C' なら 'C' - 'A' → 2 (即ち n = 2; と同じ)
|
128
128
|
|
129
129
|
・・・という具合いで、わかってしまえば、「ボート名(char b) を通し番号(int n)に変換」するやり方はいくつもある(他にもやり方はあるでしょう)ので、どうするかはあなた次第です。
|
130
130
|
|