回答編集履歴

12

ippatsu のパラメータを他と同じにした(未確認)

2024/03/19 08:28

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -7,6 +7,7 @@
7
7
  ```c
8
8
  #include <stdio.h>
9
9
  #include <stdlib.h>
10
+ #include <string.h>
10
11
  #include <time.h>
11
12
 
12
13
  #ifndef bool
@@ -87,8 +88,8 @@
87
88
  {9,8,0},{9,8,1},{9,8,2},{9,8,3},{9,8,4},{9,8,5},{9,8,6},{9,8,7}
88
89
  };
89
90
 
90
- int *ippatsu() {
91
+ int *ippatsu(int answer[]) {
91
- return IPPATSU_ANSWERS[rand()%(10*9*8)];
92
+ return memcpy(answer, IPPATSU_ANSWERS[rand()%(10*9*8)], sizeof(int)*3);
92
93
  }
93
94
  */
94
95
 
@@ -103,6 +104,6 @@
103
104
  print("質問", shitsumon(a));
104
105
  print("並替", narabikae(a));
105
106
  print("取出", toridashi(a));
106
- //print("一発", ippatsu());
107
+ //print("一発", ippatsu(a));
107
108
  }
108
109
  ```

11

修正

2024/03/16 04:50

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -1,5 +1,5 @@
1
1
  コロンブスの卵的なことで、一度分かれば何度も悩まなくて済みます。
2
- 比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版・ランダム取り出し版・一発版を並べました。一発版はデータを用意するのが面倒(& teratail に書ききれない)なのでコメントですが、他はどれも正常に動作しています(と思われます^^;;;)
2
+ 比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版・ランダム取り出し版・一発版を並べました。一発版はデータを用意するのが面倒(& teratail に書ききれないかも?)なのでコメントですが、他はどれも正常に動作しています(と思われます^^;;;)
3
3
  シャッフル版というのは、トランプ等カードゲームで "山" をシャッフルして上から必要枚数引くようなものです。
4
4
  模範解答・kihochi さん版に比べ、シャッフル版は固定回数のループだけなので必ず一定時間で結果が出ますが、最速となる(乱数の数値が重ならなかった)場合は模範解答・kihochi さん版のほうが早いです。
5
5
 

10

コード修正

2024/03/16 04:41

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -57,9 +57,7 @@
57
57
  //shuffle
58
58
  for(int i=0; i<10; i++) {
59
59
  int j = rand() % 10;
60
- int t = v[i];
60
+ int t = v[i]; v[i] = v[j]; v[j] = t; //i番目とj番目を交換
61
- v[i] = v[j];
62
- v[j] = t;
63
61
  }
64
62
  for(int i=0; i<3; i++) answer[i] = v[i];
65
63
  return answer;
@@ -67,10 +65,10 @@
67
65
 
68
66
  int *toridashi(int answer[]) {
69
67
  int v[] = {0,1,2,3,4,5,6,7,8,9};
70
- for(int i=0, c=10; i<3; i++, c--) {
68
+ for(int i=0, c=10; i<3; i++) {
71
69
  int j = rand() % c;
72
70
  answer[i] = v[j];
73
- for( ; j<c-1; j++) v[j] = v[j+1];
71
+ for(c--; j<c; j++) v[j] = v[j+1]; //j番目を消すように前詰め
74
72
  }
75
73
  return answer;
76
74
  }

9

コード修正

2024/03/16 04:35

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -76,7 +76,7 @@
76
76
  }
77
77
 
78
78
  /*
79
- static int IPPATSU_ANSWERS[10*9*8] = {
79
+ static int IPPATSU_ANSWERS[10*9*8][3] = {
80
80
  {0,1,2},{0,1,3},{0,1,4},{0,1,5},{0,1,6},{0,1,7},{0,1,8},{0,1,9},
81
81
  {0,2,1}, {0,2,3},{0,2,4},{0,2,5},{0,2,6},{0,2,7},{0,2,8},{0,2,9},
82
82
  {0,3,1},{0,3,2}, {0,3,4},{0,3,5},{0,3,6},{0,3,7},{0,3,8},{0,3,9},
@@ -90,7 +90,7 @@
90
90
  };
91
91
 
92
92
  int *ippatsu() {
93
- return IPPATSU_ANSWERS[rand%(10*9*8)];
93
+ return IPPATSU_ANSWERS[rand()%(10*9*8)];
94
94
  }
95
95
  */
96
96
 

8

追記

2024/03/16 04:21

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -1,5 +1,5 @@
1
1
  コロンブスの卵的なことで、一度分かれば何度も悩まなくて済みます。
2
- 比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版・ランダム取り出し版・一発版を並べました。一発版はデータを用意するのが面倒なのでコメントですが、他はどれも正常に動作しています(と思われます^^;;;)
2
+ 比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版・ランダム取り出し版・一発版を並べました。一発版はデータを用意するのが面倒(& teratail に書ききれい)なのでコメントですが、他はどれも正常に動作しています(と思われます^^;;;)
3
3
  シャッフル版というのは、トランプ等カードゲームで "山" をシャッフルして上から必要枚数引くようなものです。
4
4
  模範解答・kihochi さん版に比べ、シャッフル版は固定回数のループだけなので必ず一定時間で結果が出ますが、最速となる(乱数の数値が重ならなかった)場合は模範解答・kihochi さん版のほうが早いです。
5
5
 

7

一発版追加

2024/03/16 04:17

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -1,5 +1,5 @@
1
1
  コロンブスの卵的なことで、一度分かれば何度も悩まなくて済みます。
2
- 比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版・ランダム取り出し版を並べました。どれも正常に動作しています(と思われます^^;;;)
2
+ 比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版・ランダム取り出し版・一発版を並べました。一発版はデータを用意するのが面倒なのでコメントですが、他はどれも正常に動作しています(と思われます^^;;;)
3
3
  シャッフル版というのは、トランプ等カードゲームで "山" をシャッフルして上から必要枚数引くようなものです。
4
4
  模範解答・kihochi さん版に比べ、シャッフル版は固定回数のループだけなので必ず一定時間で結果が出ますが、最速となる(乱数の数値が重ならなかった)場合は模範解答・kihochi さん版のほうが早いです。
5
5
 
@@ -75,6 +75,25 @@
75
75
  return answer;
76
76
  }
77
77
 
78
+ /*
79
+ static int IPPATSU_ANSWERS[10*9*8] = {
80
+ {0,1,2},{0,1,3},{0,1,4},{0,1,5},{0,1,6},{0,1,7},{0,1,8},{0,1,9},
81
+ {0,2,1}, {0,2,3},{0,2,4},{0,2,5},{0,2,6},{0,2,7},{0,2,8},{0,2,9},
82
+ {0,3,1},{0,3,2}, {0,3,4},{0,3,5},{0,3,6},{0,3,7},{0,3,8},{0,3,9},
83
+ (中略)
84
+ {5,4,0},{5,4,1},{5,4,2},{5,4,3}, {5,4,6},{5,4,7},{5,4,8},{5,4,9},
85
+ {5,6,0},{5,6,1},{5,6,2},{5,6,3},{5,6,4}, {5,6,7},{5,6,8},{5,6,9},
86
+ (中略)
87
+ {9,6,0},{9,6,1},{9,6,2},{9,6,3},{9,6,4},{9,6,5}, {9,6,7},{9,6,8},
88
+ {9,7,0},{9,7,1},{9,7,2},{9,7,3},{9,7,4},{9,7,5},{9,7,6}, {9,7,8},
89
+ {9,8,0},{9,8,1},{9,8,2},{9,8,3},{9,8,4},{9,8,5},{9,8,6},{9,8,7}
90
+ };
91
+
92
+ int *ippatsu() {
93
+ return IPPATSU_ANSWERS[rand%(10*9*8)];
94
+ }
95
+ */
96
+
78
97
  void print(char *prompt, int a[]) {
79
98
  printf("%s : %d %d %d\n", prompt, a[0], a[1], a[2]);
80
99
  }
@@ -86,5 +105,6 @@
86
105
  print("質問", shitsumon(a));
87
106
  print("並替", narabikae(a));
88
107
  print("取出", toridashi(a));
108
+ //print("一発", ippatsu());
89
109
  }
90
110
  ```

6

コード修正

2024/03/16 03:56

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -61,14 +61,13 @@
61
61
  v[i] = v[j];
62
62
  v[j] = t;
63
63
  }
64
-
65
64
  for(int i=0; i<3; i++) answer[i] = v[i];
66
65
  return answer;
67
66
  }
68
67
 
69
68
  int *toridashi(int answer[]) {
70
69
  int v[] = {0,1,2,3,4,5,6,7,8,9};
71
- for(int i=0, c=sizeof(v)/sizeof(v[0]); i<3 && c>0; i++, c--) {
70
+ for(int i=0, c=10; i<3; i++, c--) {
72
71
  int j = rand() % c;
73
72
  answer[i] = v[j];
74
73
  for( ; j<c-1; j++) v[j] = v[j+1];

5

追記

2024/03/16 03:54

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -1,5 +1,5 @@
1
1
  コロンブスの卵的なことで、一度分かれば何度も悩まなくて済みます。
2
- 比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版を並べました。
2
+ 比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版・ランダム取り出し版を並べました。どれも正常に動作しています(と思われます^^;;;)
3
3
  シャッフル版というのは、トランプ等カードゲームで "山" をシャッフルして上から必要枚数引くようなものです。
4
4
  模範解答・kihochi さん版に比べ、シャッフル版は固定回数のループだけなので必ず一定時間で結果が出ますが、最速となる(乱数の数値が重ならなかった)場合は模範解答・kihochi さん版のほうが早いです。
5
5
 

4

ランダム取り出しを追加

2024/03/16 03:50

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -66,6 +66,16 @@
66
66
  return answer;
67
67
  }
68
68
 
69
+ int *toridashi(int answer[]) {
70
+ int v[] = {0,1,2,3,4,5,6,7,8,9};
71
+ for(int i=0, c=sizeof(v)/sizeof(v[0]); i<3 && c>0; i++, c--) {
72
+ int j = rand() % c;
73
+ answer[i] = v[j];
74
+ for( ; j<c-1; j++) v[j] = v[j+1];
75
+ }
76
+ return answer;
77
+ }
78
+
69
79
  void print(char *prompt, int a[]) {
70
80
  printf("%s : %d %d %d\n", prompt, a[0], a[1], a[2]);
71
81
  }
@@ -76,5 +86,6 @@
76
86
  print("模範", sukkiri(a));
77
87
  print("質問", shitsumon(a));
78
88
  print("並替", narabikae(a));
89
+ print("取出", toridashi(a));
79
90
  }
80
91
  ```

3

追記

2024/03/15 15:18

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -1,5 +1,6 @@
1
1
  コロンブスの卵的なことで、一度分かれば何度も悩まなくて済みます。
2
2
  比較し易いように、書籍の模範解答・kihochiさん版・そしてシャッフル版を並べました。
3
+ シャッフル版というのは、トランプ等カードゲームで "山" をシャッフルして上から必要枚数引くようなものです。
3
4
  模範解答・kihochi さん版に比べ、シャッフル版は固定回数のループだけなので必ず一定時間で結果が出ますが、最速となる(乱数の数値が重ならなかった)場合は模範解答・kihochi さん版のほうが早いです。
4
5
 
5
6
  (paizaIO で bool がエラーになったので定義してます。)

2

スペルミス

2024/03/14 11:14

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -53,7 +53,7 @@
53
53
 
54
54
  int *narabikae(int answer[]) {
55
55
  int v[] = {0,1,2,3,4,5,6,7,8,9};
56
- //suffle
56
+ //shuffle
57
57
  for(int i=0; i<10; i++) {
58
58
  int j = rand() % 10;
59
59
  int t = v[i];

1

コード修正

2024/03/14 11:07

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -56,10 +56,9 @@
56
56
  //suffle
57
57
  for(int i=0; i<10; i++) {
58
58
  int j = rand() % 10;
59
- int k = rand() % 10;
60
- int t = v[j];
59
+ int t = v[i];
61
- v[j] = v[k];
60
+ v[i] = v[j];
62
- v[k] = t;
61
+ v[j] = t;
63
62
  }
64
63
 
65
64
  for(int i=0; i<3; i++) answer[i] = v[i];