这题看题解都太复杂,于是想给出个简单点的思路。
#include <bits/stdc++.h>
using namespace std;
int n;
int a[1000005], b[1000005];//a存输入,b存输出
int main() {
//输入部分
cin >> n;
for (int i = 1; i <= n; i ++) a[i] = i;
//执行部分
int x = 0, y = 1;//x,y作用见下
for (int i = 1; ; i ++) {
int num = i % (n + 1);//表示当前数组下标,n若不加1,13就存不进去
if (a[num] != 0) x ++;
if (x == 2) {//逢2取一张牌
a[num] = 0;//打标记
x = 0;//x归0
b[num] = y;//在b数组同样的位置存y
y ++;//y存完了,再存y + 1
}
if (y == n) break;//结束条件,y = n表示b数组从1到n都按顺序存好了
}
//输出部分
for (int i = 1; i <= n; i ++) {
if (b[i] == 0) cout << n << " ";//特判,
经过多次样例测试,n输出时为0
else cout << b[i] << " ";//正常输出
}
return 0;
}
认为好的吱一声