谁来帮帮我呀(\`0`/),解答有关注呀!!!
  • 板块学术版
  • 楼主Error_303
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/9/17 20:09
  • 上次更新2023/11/2 19:42:05
查看原帖
谁来帮帮我呀(\`0`/),解答有关注呀!!!
683695
Error_303楼主2023/9/17 20:09

有哪个大佬能帮我这个蒟蒻改一改呀! 如果对我有帮助的话,我一定会关注的呀,求求你们啦!

我这里用的是C++语言,各位大佬帮我改一改吧(qwq)!

描述: 有 n 个人排成一圈,从 1 到 n 编号。从第一个人开始依次报数(第一个人报的数是 1 ,下一个人报的数是 2 ,...,当前这个人报的数字等于前面那个人报的数字加一),报数一共进行 n 轮,对于第 i (1≤i≤n) 轮,数到 i2 的人出列,下一个人继续从 1 开始报数。结束的时候所有人都会出列。

请依次输出每一轮出列的人的编号。

输入格式 第一行一个整数 n 。

输出格式 输出一行,包含 n 个数,表示每一轮出列的人的编号。

样例输入 10 样例输出 1 5 6 8 9 10 2 3 4 7 数据规模 对于 30% 的数据,保证 1≤n≤100 。

对于 100% 的数据,保证 1≤n≤5000 。

代码:

#include <iostream>
using namespace std;
struct Node {
	int v;
	Node *p, *n;
} a[5010];
int n, m;
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		a[i].v = i;
		if (i == n) {
			a[i].n = &a[1];
		} else {
			a[i].n = &a[i + 1];
		}
		if (i == 1) {
			a[i].p = &a[n];
		} else {
			a[i].p = &a[i - 1];
		}
	}
	Node *pd = &a[n];
	int x = 0, k = 1;
	while (1) {
		pd = pd->n;
		++x;
		m = k * k;
		if (x == m) {
			printf("%d ", pd->v);
			if (pd->n == pd) {
				break;
			} else {
				Node *l = pd->p, *r = pd->n;
				l->n = r;
				r->p = l;
				pd->p = pd->n = NULL;
				x = 0;
				pd = l;
			}
			k++;
		}
	}
	
	return 0;
}
2023/9/17 20:09
加载中...