更简单的思路
查看原帖
更简单的思路
1121748
PYM20111102楼主2024/10/4 22:05

这题看题解都太复杂,于是想给出个简单点的思路。

#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;
}

认为好的吱一声

2024/10/4 22:05
加载中...