题目链接
你发现对一个位置操作 \(n - 1\) 次之后,这个位置上一定是 \(0\),因为已经被换出去的一定不会再回来。
你再对它前一个位置操作 \(n - 1\) 次之后,这两个位置一定是 \(0, 1\),因为一定是 \(1\) 换回来的 \(0\)。
你再对它们前一个位置操作 \(n - 1\) 次之后,这三个位置一定是 \(0, 1, 2\),……,以此类推。
所以你从 \(n - 1\) 到 \(0\),每个位置都操作 \(n - 1\) 次,一定会得到 \(0, 1, 2, \ldots, n - 1\)!
#include<cstdio>
using namespace std;int n;
int main() {scanf("%d",&n);printf("%d\n",n*(n-1));for(int i=n-1;~i;i--)for(int j=1;j<n;j++)printf("%d\n",i);return 0;
}