有 n 个人排成一圈,从 1 到 n 编号。从第一个人开始依次报数(第一个人报的数是 1,下一个人报的数是 2,...,当前这个人报的数字等于前面那个人报的数字加一),报数一共进行 n 轮,对于第 i (1≤i≤n) 轮,数到 i2 的人出列,下一个人继续从 1 开始报数。结束的时候所有人都会出列。
请依次输出每一轮出列的人的编号。
我的代码(0):
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long Barbatoss;
typedef long long Wendy;
typedef long ShaTang;
typedef int LeiZe;
Barbatoss n,i,b,t,a[1000001];
main(){
scanf("%llu",&n);
i=1;
while(i<=n){
b=((i*i)%n+t)%n;
if(b==0)b+=n;
while(a[b]){
b++;
b%=n;
if(b==0)b+=n;
}
a[b]=b;
printf("%llu ",b);
t=b;
i++;
}
}
求调!!!!!!