提交时间:2023-11-11 11:10:05
运行 ID: 109841
#include <bits/stdc++.h> using namespace std; int N; double search(int s,int e) { if(s > e) return 1; if(e - s == 0) { return 1; } if(e - s == 1) { return 1; } double num = 0; for(int i = s;i <= e;i++) { if(i == (e - s) / 2 + s) { num += search(s,i-1); } else { num += search(s,i-1); //根节点是第i个被访问的 num += search(i+1,e); } } return num; } int main() { while(cin >> N) { if(N == 2) { cout << 2 << endl; continue; } if(N == 3) { cout << 5 << endl; continue; } double sum = 0; for(int i = 1;i <= N;i++) { if(i == N / 2 + 1) { sum += search(i + 1,N); } else { sum += search(1,i - 1); //根节点是第i个被访问的 sum += search(i + 1,N); } } cout << sum - 3<< endl; } }