题目描述
设有n个人围坐一圈并按顺时针方向从1到n编号,从第1个人开始进行1到m的报数,报数到第个m人,此人出圈,再从他的下一个人重新开始1到m的报数,如此进行下去直到所剩下一人为止。
输入
输入多行,每行2个数,分别表示n和m.
输出
计算每一行中最后剩下这个人的编号.
样例输入
10 3
样例输出
4
这题我主要用k来计录同学的报数,然后每等于m就删除(赋值),归零,然后就是每循环到人数n时就使i=0重来,一直循环直到剩下人数为1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n,m;
while (scanf("%d %d",&n,&m)!=EOF)
{
function(n,m);
}
return 0;
}
void function(int n,int m)
{
int a[1000];
int i,k=0;
int s;
for(i=0;i<1000;i++)
a[i]=0;
i=0;
s=n;
while (n>1)
{
if(a[i]==0)
{
k++;
}
if(k==m)
{
a[i]=1; //删除
k=0; //记录归零
n--; //总人数减一
}
i++;
if(i==s)
{
i=0;
}
}
for(i=0;i<s;i++)
if(a[i]==0)
printf("%d\n",i+1);
return 0;
}