数组实战3
题目
题目描述
有M个人,其编号分别为1~M。这M个人按顺序排成一个圈。现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列,如此循环,直到最后一个人出列为止。
输入
只有一行,包括2个整数M(8 <= M <= 10000 ),N( 5 <= N <= 1000)。之间用一个空格分开。
输出
一行,包含M个数,表示依次出圈的人的编号。
思路
这仍然是一道数组的题目,题目简化的来讲就是n个n个人来数数知道找出最后的那一个人,我们可以将这些数归纳成一个数组,之后再经行循环,每次循环到那个出就将那个数字给去除,之后我们就可以得到了最后的一个数,也是正确的答案
程序
#include<bits/stdc++.h>
using namespace std;
int a[10010],m,n,kill,p,c;
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
a[i]=1;
p=1;
while(kill<m)
{
c+=a[p];
if(c==n)
{
kill++;
a[p]=0;
cout<<p<<" ";
c=0;
}
p++;
if(p>m)
p=0;
}
return 0;
}