时间限制: 1000 ms 内存限制: 65536 KB
提交数: 18417 通过数: 9605
【题目描述】
N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;…输出依次出圈的人的编号。
【输入】
输入N和M。
【输出】
输出一行,依次出圈的人的编号。
【输入样例】
8 5
【输出样例】
5 2 8 7 1 4 6 3
【提示】
5 2 8 7 1 4 6 3
【提示】
【数据范围】
对于所有数据,2≤N,M≤1000。
二、思路1.用while循环限制循环次数,每出圈一个人,人数减一,直到人数为零时循环结束。
2.定义一个数组全部置为0当做标记,当出圈时置为1。用数组的下标计数,每数到m则为出圈。每当数完一圈把数组下标再置1形成一个循环。
三、代码
#includeusing namespace std; int main() { int n,m; //n为人数 m为数到出圈的数 int i=0,t=0; //i为数组的下标 t做计数用与m比较决定什么时候出圈 int a[1001]={0}; //定义一个全为零的数组 cin>>n>>m; int c=n; //c当计数用 记录还剩几个没出圈 while(c>0) { i++; if(i>n) i=1; //当数组下标大于最大值时 再置为1 从头再开始数 if(a[i]==0) { t++; //当遇到没有出圈的人t++ if(t==m) //当符合出圈条件时 { a[i]=1; //下标置1 表示已经出圈 t=0; //从新再开始计数 c--; //剩余人数减1 cout<



