もどる aの日記

プレイヤーデータプロフィール日記最近の出来事ダンジョンスコア紹介リンク
記事一覧新着ブログ人気ブログ

ダンジョン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);}』

プレイヤー:
パスワード:
コメント: