teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追加

2020/04/21 12:30

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -20,4 +20,26 @@
20
20
  } while(card != '\0');
21
21
  printf("%c\n", i + P);
22
22
  }
23
+ ```
24
+
25
+ do-while は for に纏めれば小さくなりますね.
26
+ ```c
27
+ #include <stdio.h>
28
+
29
+ #define N 3 /*人数*/
30
+ #define M 100 /*最大枚数*/
31
+ #define C 'a' /*カード(オフセット)*/
32
+ #define P 'A' /*参加者(オフセット)*/
33
+
34
+ int main(int argc, char *argv[]) {
35
+ int i, top[N]={0};
36
+ char card, S[N][M+1];
37
+ //入力
38
+ for(i=0;i<N;i++) scanf("%s", S[i]);
39
+ //勝負
40
+ for(card=C; card!='\0'; card=S[i][top[i]++]) i = card - C;
41
+ //出力
42
+ printf("%c\n", i + P);
43
+ }
44
+
23
45
  ```

2

コードを読み易く(?)

2020/04/21 12:30

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -2,19 +2,22 @@
2
2
  ```c
3
3
  #include <stdio.h>
4
4
 
5
+ #define N 3 /*人数*/
6
+ #define M 100 /*最大枚数*/
7
+ #define C 'a' /*カード(オフセット)*/
8
+ #define P 'A' /*参加者(オフセット)*/
9
+
5
10
  int main(int argc, char *argv[]) {
6
- int i, n[3]={0};
11
+ int i, top[N]={0};
7
- char c, S[3][101];
12
+ char card, S[N][M+1];
8
13
 
9
- scanf("%s", S[0]);
14
+ for(i=0;i<N;i++) scanf("%s", S[i]);
10
- scanf("%s", S[1]);
11
- scanf("%s", S[2]);
12
15
 
13
- c = 'a';
16
+ card = C;
14
17
  do {
15
- i = c - 'a';
18
+ i = card - C;
16
- c = S[i][n[i]++];
19
+ card = S[i][top[i]++];
17
- } while(c != '\0');
20
+ } while(card != '\0');
18
- printf("%c\n", i+'A');
21
+ printf("%c\n", i + P);
19
22
  }
20
23
  ```

1

char 変数があったほうが分かり易い?

2020/04/21 04:17

投稿

jimbe
jimbe

スコア13355

answer CHANGED
@@ -3,18 +3,18 @@
3
3
  #include <stdio.h>
4
4
 
5
5
  int main(int argc, char *argv[]) {
6
+ int i, n[3]={0};
6
- char S[3][101];
7
+ char c, S[3][101];
7
- int n[3] = {0};
8
8
 
9
9
  scanf("%s", S[0]);
10
10
  scanf("%s", S[1]);
11
11
  scanf("%s", S[2]);
12
12
 
13
- int i, j=0;
13
+ c = 'a';
14
14
  do {
15
- i = j;
16
- j = S[i][n[i]++] - 'a';
15
+ i = c - 'a';
16
+ c = S[i][n[i]++];
17
- } while(j >= 0);
17
+ } while(c != '\0');
18
18
  printf("%c\n", i+'A');
19
19
  }
20
20
  ```