問題はこちら
No.65 回数の期待値の練習 - yukicoder
問題文中の漸化式にしたがってそのまま実装
int main(){ double e[30]={}; int k; scanf("%d",&k); while(k--)e[k]=(e[k+1]+e[k+2]+e[k+3]+e[k+4]+e[k+5]+e[k+6])/6+1; printf("%f",e[0]); return 0; }
要求誤差がありえないくらいゆるいので、近似式を作って埋め込みましょう
t;main(){t=scanf("%d",&t)>printf("%f",t<8?.02*t*t+.09*t+.9:t*.28+.53);}
71B
この近似式はエクセルとにらめっこしながら2時間くらい掛けて作った
これよりいい式があるかどうかは分からない
n | 真値 | 近似値 | 相対誤差 |
---|---|---|---|
1 | 1.00000 | 1.01 | 0.01000 |
2 | 1.16667 | 1.16 | 0.00571 |
3 | 1.36111 | 1.35 | 0.00816 |
4 | 1.58796 | 1.58 | 0.00501 |
5 | 1.85262 | 1.85 | 0.00142 |
6 | 2.16139 | 2.16 | 0.00064 |
7 | 2.52163 | 2.51 | 0.00461 |
8 | 2.77523 | 2.77 | 0.00188 |
9 | 3.04332 | 3.05 | 0.00219 |
10 | 3.32369 | 3.33 | 0.00190 |
11 | 3.61298 | 3.61 | 0.00083 |
12 | 3.90638 | 3.89 | 0.00419 |
13 | 4.19721 | 4.17 | 0.00648 |
14 | 4.47647 | 4.45 | 0.00591 |
15 | 4.76001 | 4.73 | 0.00630 |
16 | 5.04612 | 5.01 | 0.00716 |
17 | 5.33319 | 5.29 | 0.00810 |
18 | 5.61990 | 5.57 | 0.00888 |
19 | 5.90548 | 5.85 | 0.00940 |
20 | 6.19020 | 6.13 | 0.00972 |
ちなみに、サイコロ1回あたり平均3.5マス進めるので、kが十分大きくなれば答えはk/3.5に近づいていく