ダンジョン1位を狙うには 2013-12-07 11:18 a
★0★ 774 pv
さっきのプログラム(
[リンク])の末尾にある
for(n=0;n<67;n++){s+=a[n];fprintf(file,"%d %d\n",n,a[n]);}
fprintf(file,"%d\n",s/N);
という部分を
fprintf(file,"0\n");
for(n=0;n<67;n++){s+=a[n];fprintf(file,"%d\n",n,a[n]);}
と書き換えてできたファイルtest.txtを使って、ダンジョンランキング1位を狙える確率を概算できる。
ただし、店の出現なし、混乱・幻惑なしと仮定した場合
こんな風にすれば、20フロアあたりの歩数を、10歩刻みで求めてくれる。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 1000000
#define F 20
int check(int x,int *a){
int l=0,h=67,m;
while(h-l<>1){
m=(l+h)/2;
if(x<a[m])h=m;else(l=m);
}
return l;
}
int main(void){
srand(time(NULL));
FILE *file;
int a[68],b[100]={},t,i,j,n,s;
file = fopen("ts.txt","r");
for(i=0;i<68;i++)fscanf(file,"%d",&a[i]);
fclose(file);
for(n=0;n<N;n++){
s=0;
for(i=0;i<F;i++){
t=0;
for(j=0;j<7;j++){t*=10,t+=rand()%10;}
s+=check(t,a);
}
b[s/10]++;
}
for(i=0;i<100;i++)fprintf(file,"%d,%d\n",i,b[i]);
fclose(file);
}
例えば風の森林(全25F)の1位(487歩)を超えたいなら
#define F 20
を
#define F 23
に変え
b[s/10]++;
}
for(i=0;i<100;i++)fprintf(file,"%d,%d\n",i,b[i]);
の部分を
s<=465&&b[0]++;
}
printf("%lf\n",(double)b[0]/N);
とすれば、確率を表示する(0.043653)
c.f.泉15歩:店19歩:ボス4+3歩
コメント:
a『冒頭の書き換えの2行目が間違ってた。正しくは for(n=0;n<67;n++){s+=a[n];fprintf(file,"%d\n",s);}』