#include #include #include #include #include #include using namespace std; struct L { double a, b; L (double a=0, double b=0): a(a), b(b) {} L operator+(const L& x) const { return L(a+x.a, b+x.b); } L operator-(const L& x) const { return L(a-x.a, b-x.b); } L operator*(double x) const { return L(a*x, b*x); } L operator/(double x) const { return L(a/x, b/x); } }; int main() { int K; cin >> K; // DP[ 状態S ] := からゴールするまでの期待回数 vector DP(K+1); DP[K] = L(0, 0); for (int i=K-1;0<=i;i--) { DP[i] = L(0, 1); for (int j=1;j<=6;j++) { if (i+j <= K) DP[i] = DP[i] + DP[i+j] * (double)(1.0/6.0); else // DP[i] = DP[i] + DP[0]; // DP[0] = x とおく。 DP[i] = DP[i] + L(1, 0) * (double)(1.0/6.0); } } // x = DP[0] = ax + b 状態。 // (1-a)x = bとなる. double a = DP[0].a; double b = DP[0].b; cout << fixed << setprecision(12) << b/(1.0 - a) << endl; }