编号为1、2、3、...、N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。从指定编号为1的人开始,他的密码为M的初始值,按顺时针方向从1号自己开始顺序报数,报到指定数M时停止报数,报M的人出列,并将他的密码作为新的M值,从他在顺时针方向的下一个人开始,重新从1报数,报到M的人出列;出列人的密码作为下一轮报数的值。依此类推,直至所有的人全部出列为止。请设计一个程序求出出列的顺序,人数N及每个人的密码值从键盘输入。
要求:用二维数组完成(不得使用结构体)。
输入格式:
输入2行。
第1行为一个正正数N(2≤N≤30),表示参与游戏的人数。
第2行,N个正整数,表示每个人的密码M(1≤M≤10)。
输出格式:
按出列顺序依次输出所有游戏者的编号,用空格隔开。
输入样例:
在这里给出一组输入。例如:
4
2 3 1 2
输出样例:
在这里给出相应的输出。例如:
2 1 4 3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
//#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//#include<iostream>
//using namespace std;
#define MAX 100000000
int a[MAX] = { 0 };
int b[MAX] = { 0 };
int main()
{int N;int cnt = 0, i = 0, k = 0;scanf("%d", &N);for (int i = 1; i <= N; i++){scanf("%d", &b[i]);}int bu = 1;while (cnt != N){i++;if (i > N) i = 1;if (a[i] == 0){k++;if (k == b[bu]){a[i] = 1;cnt++;printf("%d ", i);k = 0;bu = i;}}}return 0;
}