瞎想了一种方法,还没有证明他的正确性。
查看原帖
瞎想了一种方法,还没有证明他的正确性。
524191
Man_CCNU楼主2021/12/6 21:49
#include<iostream>

using namespace std;

int n,res;

int main()
{
    cin >> n;
    int tem = n + 1;
    int end = tem;
    int res = 1;
    tem = 1;
    while (tem != end) {
        if (tem <= n) {
            tem = 2 * tem;
        }
        else {
            int zu = tem - n - 1;
            zu = zu * 2 + 1;
            tem = zu;
        }
        res++;
    }
    cout << res << endl;

    return 0;
}

#洗牌m次后,如果任选一个数回归了原来的位置,则证明可以了,把牌的位置分两种情况讨论(x<=n的情况和x>n的情况,x可以选n+1这个数(好讨论),这样递归下去)

2021/12/6 21:49
加载中...