質問編集履歴

3

質問内容の修正

2020/06/10 10:03

投稿

toookiii
toookiii

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,24 @@
1
+ 前提・実現したいこと
2
+
3
+ ガチャシュミレータを作成しファイルには値段がいくらで当たりを引けたのかを書き込みたい
4
+
5
+ ここに質問の内容を詳しく書いてください。
6
+
7
+ C言語のLinuxでガチャシュミレータを作っています
8
+
9
+ 確率を0.02%と設定しているのですが確率が偏っており5万~10万の間にすべて収まってしまっている状態です→バラけるようにしたいです
10
+
11
+ 最大値,最小値が同じ値で保存されているのもなぜなのかわからない状態です→それぞれ違う値できちんと保存されて欲しいです
12
+
13
+
14
+
15
+
16
+
17
+ ```ここに言語を入力
18
+
19
+ コード
20
+
1
- `#include<stdio.h>
21
+ ``#include<stdio.h>
2
22
 
3
23
  #include<stdlib.h>
4
24
 
@@ -198,21 +218,7 @@
198
218
 
199
219
  }}
200
220
 
201
- ``ここに言語を入力
202
-
203
- コード
221
+ `
204
-
205
- ``` 前提・実現したいこと
206
-
207
- ガチャシュミレータを作成しファイルには値段がいくらで当たりを引けたのかを書き込みたい
208
-
209
- ここに質問の内容を詳しく書いてください。
210
-
211
- C言語のLinuxでガチャシュミレータを作っています
212
-
213
- 確率を0.02%と設定しているのですが確率が偏っており5万~10万の間にすべて収まってしまっている状態です→バラけるようにしたいです
214
-
215
- 最大値,最小値が同じ値で保存されているのもなぜなのかわからない状態です→それぞれ違う値できちんと保存されて欲しいです
216
222
 
217
223
 
218
224
 

2

質問内容の修正

2020/06/10 10:03

投稿

toookiii
toookiii

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,208 @@
1
+ `#include<stdio.h>
2
+
3
+ #include<stdlib.h>
4
+
5
+ #include<unistd.h>
6
+
7
+ #include <time.h>
8
+
9
+ #define L 100000 //生成個数
10
+
11
+ void shoki(double a[],int argc,char *argv[]);//初期化
12
+
13
+ void GetRandom(unsigned int x[],int i);//乱数発生
14
+
15
+
16
+
17
+ int main(int argc,char* argv[])
18
+
19
+ {
20
+
21
+ unsigned int now = (unsigned int)time( 0 );
22
+
23
+ srand( now );
24
+
25
+ int i,j,h;
26
+
27
+ double y[L],a[4];
28
+
29
+ int min,max=100;//最大,最小を格納
30
+
31
+ double sum=0;//金額の合計を保存
32
+
33
+ int count[10]={0};//何回当たったかを数える
34
+
35
+ unsigned int x[L];
36
+
37
+ FILE *fp;//ファイルを定義
38
+
39
+ int gold[L]={0};//かかった金額を保存する配列
40
+
41
+ shoki(a,argc,argv);//コマンドラインから出力
42
+
43
+ for(i=0;i<=a[2];i++){GetRandom(x,i);y[i]=(double)x[i]/100;}//乱数を発生
44
+
45
+ printf("当たり確率%lf\n",a[0]);printf("一つ目の乱数値%lf\n",y[0]);
46
+
47
+ min=30000;max=0;
48
+
49
+ for(j=1;j<=a[2];j++){
50
+
51
+ for(i=1;i<=a[2];i++){
52
+
53
+ if(y[i]<=a[0])
54
+
55
+ {
56
+
57
+ gold[j]=i*a[1];//金額を保存
58
+
59
+ sum=sum+gold[j];//合計金額を保存
60
+
61
+ if(gold[j]>max){max=gold[j];}//最大値を保存
62
+
63
+ else{if(gold[j]<min){min=gold[j];}//最小値を保存
64
+
65
+ }break;}}}
66
+
67
+ for(j=1;j<=a[2];j++)//回数をそれぞれの場合で数える
68
+
69
+ {
70
+
71
+ if((0<gold[j])&&(gold[j]<a[3])){
72
+
73
+ count[0]=count[0]+1;
74
+
75
+ }else{
76
+
77
+ if(gold[j]<2*a[3]){
78
+
79
+ count[1]=count[1]+1;
80
+
81
+ }else{
82
+
83
+ if(gold[j]<3*a[3]){
84
+
85
+ count[2]=count[2]+1;
86
+
87
+ }else{
88
+
89
+ if(gold[j]<4*a[3]){
90
+
91
+ count[3]=count[3]+1;
92
+
93
+ }else{
94
+
95
+ if(gold[j]<5*a[3]){
96
+
97
+ count[4]=count[4]+1;
98
+
99
+ }else{
100
+
101
+ if(gold[j]<6*a[3]){
102
+
103
+ count[5]=count[5]+1;
104
+
105
+ }else{
106
+
107
+ if(gold[j]<7*a[3]){
108
+
109
+ count[6]=count[6]+1;
110
+
111
+ }else{
112
+
113
+ if(gold[j]<8*a[3]){
114
+
115
+ count[7]=count[7]+1;
116
+
117
+ }else{
118
+
119
+ if(gold[j]<9*a[3]){
120
+
121
+ count[8]=count[8]+1;
122
+
123
+ }else{
124
+
125
+ count[9]=count[9]+1;}
126
+
127
+
128
+
129
+ }}}}}}}}
130
+
131
+ }
132
+
133
+
134
+
135
+ if((fp=fopen("ガチャ.csv","w"))==NULL){
136
+
137
+ printf("ファイルが出力されませんでした\n"); exit(1);}
138
+
139
+ for(i=1;i<10;i++){
140
+
141
+ fprintf(fp, "%.0lf--%.0lf,%d\n",a[3]/10000*(i-1),a[3]/10000*i,count[i-1]);}//ファイルに出力
142
+
143
+ fclose(fp);
144
+
145
+ printf("min=%d,max=%d,avg=%lf\n",min,max,sum/a[2]);
146
+
147
+ return 0;}
148
+
149
+
150
+
151
+
152
+
153
+ void GetRandom(unsigned int x[],int i)//乱数生成関数
154
+
155
+ { x[i]=rand()%100;}//x[i]=rand()%100;}//x[i+1]=(4*x[i] + 7 ) % 100;};
156
+
157
+
158
+
159
+ void shoki(double a[],int argc,char* argv[])//初期化の関数
160
+
161
+ {
162
+
163
+ int opt;
164
+
165
+ //コマンドラインで打たれたものを読み込む
166
+
167
+ while((opt = getopt(argc, argv, "R:C:T:B:")) !=-1){
168
+
169
+ switch (opt) {
170
+
171
+ case 'R':
172
+
173
+ a[0] = atof(optarg);//出現確率
174
+
175
+ break;
176
+
177
+ case 'C':
178
+
179
+ a[1] = atof(optarg);//金額
180
+
181
+ break;
182
+
183
+ case 'T':
184
+
185
+ a[2] = atof(optarg);//試行回数
186
+
187
+ break;
188
+
189
+ case'B':
190
+
191
+ a[3] = atof(optarg);//度数分布の区間幅
192
+
193
+ break;
194
+
195
+ default:
196
+
197
+ break;}
198
+
199
+ }}
200
+
1
- ```ここに言語を入力
201
+ ``ここに言語を入力
2
202
 
3
203
  コード
4
204
 
5
- ```### 前提・実現したいこと
205
+ ``` 前提・実現したいこと
6
206
 
7
207
  ガチャシュミレータを作成しファイルには値段がいくらで当たりを引けたのかを書き込みたい
8
208
 
@@ -14,222 +214,6 @@
14
214
 
15
215
  最大値,最小値が同じ値で保存されているのもなぜなのかわからない状態です→それぞれ違う値できちんと保存されて欲しいです
16
216
 
17
- ```ここに言語を入力
18
-
19
- コード
20
-
21
- ```#include<stdio.h>
22
-
23
- #include<stdlib.h>
24
-
25
- #include<unistd.h>
26
-
27
- #include <time.h>
28
-
29
- #define L 100000 //生成個数
30
-
31
- void shoki(double a[],int argc,char *argv[]);//初期化
32
-
33
- void GetRandom(unsigned int x[],int i);//乱数発生
34
-
35
-
36
-
37
- int main(int argc,char* argv[])
38
-
39
- {
40
-
41
- unsigned int now = (unsigned int)time( 0 );
42
-
43
- srand( now );
44
-
45
- int i,j,h;
46
-
47
- double y[L],a[4];
48
-
49
- int min,max=100;//最大,最小を格納
50
-
51
- double sum=0;//金額の合計を保存
52
-
53
- int count[10]={0};//何回当たったかを数える
54
-
55
- unsigned int x[L];
56
-
57
- FILE *fp;//ファイルを定義
58
-
59
- int gold[L]={0};//かかった金額を保存する配列
60
-
61
- shoki(a,argc,argv);//コマンドラインから出力
62
-
63
- for(i=0;i<=a[2];i++){GetRandom(x,i);y[i]=(double)x[i]/100;}//乱数を発生
64
-
65
- printf("当たり確率%lf\n",a[0]);printf("一つ目の乱数値%lf\n",y[0]);
66
-
67
- for(j=1;j<=a[2];j++){
68
-
69
- for(i=1;i<=a[2];i++){
70
-
71
- //if(j==a[2]){printf("%d回目外れ\n",j);}
72
-
73
- if(y[i]<a[0])
74
-
75
- {
76
-
77
- gold[j]=i*a[1];//金額を保存
78
-
79
- min=gold[1];max=gold[1];
80
-
81
- sum=sum+gold[j];//合計金額を保存
82
-
83
- if(gold[j]>max){max=gold[j];}//最大値を保存
84
-
85
- else{if(gold[j]<min){min=gold[j];}//最小値を保存
86
-
87
- }break;}}}
88
-
89
- j=1;
90
-
91
- while(j<=a[2])//回数をそれぞれの場合で数える
92
-
93
- {
94
-
95
- if((0<gold[j])&&(gold[j]<a[3])){
96
-
97
- count[0]=count[0]+1;
98
-
99
- }else{
100
-
101
- if(gold[j]<2*a[3]){
102
-
103
- count[1]=count[1]+1;
104
-
105
- }else{
106
-
107
- if(gold[j]<3*a[3]){
108
-
109
- count[2]=count[2]+1;
110
-
111
- }else{
112
-
113
- if(gold[j]<4*a[3]){
114
-
115
- count[3]=count[3]+1;
116
-
117
- }else{
118
-
119
- if(gold[j]<5*a[3]){
120
-
121
- count[4]=count[4]+1;
122
-
123
- }else{
124
-
125
- if(gold[j]<6*a[3]){
126
-
127
- count[5]=count[5]+1;
128
-
129
- }else{
130
-
131
- if(gold[j]<7*a[3]){
132
-
133
- count[6]=count[6]+1;
134
-
135
- }else{
136
-
137
- if(gold[j]<8*a[3]){
138
-
139
- count[7]=count[7]+1;
140
-
141
- }else{
142
-
143
- if(gold[j]<9*a[3]){
144
-
145
- count[8]=count[8]+1;
146
-
147
- }else{
148
-
149
- count[9]=count[9]+1;}
150
-
151
-
152
-
153
- }}}}}}}}
154
-
155
- j++;
156
-
157
- }
158
-
159
-
160
-
161
- if((fp=fopen("ガチャ.csv","w"))==NULL){
162
-
163
- printf("ファイルが出力されませんでした\n"); exit(1);}
164
-
165
- for(i=1;i<10;i++){
166
-
167
- fprintf(fp, "%.0lf--%.0lf,%d\n",a[3]/10000*(i-1),a[3]/10000*i,count[i-1]);}//ファイルに出力
168
-
169
- fclose(fp);
170
-
171
- printf("min=%d,max=%d,avg=%lf\n",min,max,sum/a[2]);
172
-
173
- return 0;}
174
-
175
-
176
-
177
-
178
-
179
- void GetRandom(unsigned int x[],int i)//乱数生成関数
180
-
181
- { x[i]=rand()%100;}//x[i]=rand()%100;}//x[i+1]=(4*x[i] + 7 ) % 100;};
182
-
183
-
184
-
185
- void shoki(double a[],int argc,char* argv[])//初期化の関数
186
-
187
- {
188
-
189
- int opt;
190
-
191
- //コマンドラインで打たれたものを読み込む
192
-
193
- while((opt = getopt(argc, argv, "R:C:T:B:")) !=-1){
194
-
195
- switch (opt) {
196
-
197
- case 'R':
198
-
199
- a[0] = atof(optarg);//出現確率
200
-
201
- break;
202
-
203
- case 'C':
204
-
205
- a[1] = atof(optarg);//金額
206
-
207
- break;
208
-
209
- case 'T':
210
-
211
- a[2] = atof(optarg);//試行回数
212
-
213
- break;
214
-
215
- case'B':
216
-
217
- a[3] = atof(optarg);//度数分布の区間幅
218
-
219
- break;
220
-
221
- default:
222
-
223
- break;}
224
-
225
- }}
226
-
227
-
228
-
229
-
230
-
231
-
232
-
233
217
 
234
218
 
235
219
  ### 試したこと

1

質問内容の修正

2020/06/10 10:02

投稿

toookiii
toookiii

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,8 @@
1
+ ```ここに言語を入力
2
+
3
+ コード
4
+
1
- ### 前提・実現したいこと
5
+ ```### 前提・実現したいこと
2
6
 
3
7
  ガチャシュミレータを作成しファイルには値段がいくらで当たりを引けたのかを書き込みたい
4
8
 
@@ -6,15 +10,15 @@
6
10
 
7
11
  C言語のLinuxでガチャシュミレータを作っています
8
12
 
13
+ 確率を0.02%と設定しているのですが確率が偏っており5万~10万の間にすべて収まってしまっている状態です→バラけるようにしたいです
14
+
9
- まいちなぜうまいこといかのかわかりませ
15
+ 最大値,最小値が同じ値で保存されてるのもなぜなのかわからない状態です→それぞれ違う値できちと保存されて欲しいです
10
-
16
+
11
- ### 該当のソースコード
17
+ ```ここに言語を入力
12
-
13
-
14
-
18
+
15
- C言語
19
+ コード
16
-
20
+
17
- #include<stdio.h>
21
+ ```#include<stdio.h>
18
22
 
19
23
  #include<stdlib.h>
20
24
 
@@ -34,6 +38,10 @@
34
38
 
35
39
  {
36
40
 
41
+ unsigned int now = (unsigned int)time( 0 );
42
+
43
+ srand( now );
44
+
37
45
  int i,j,h;
38
46
 
39
47
  double y[L],a[4];
@@ -222,6 +230,8 @@
222
230
 
223
231
 
224
232
 
233
+
234
+
225
235
  ### 試したこと
226
236
 
227
237