题目描述
将m个孩子从1到m编上号,按序号围坐成一个圈,从1号孩子开始数,每数到n时,被数到的孩子即离开圈子,然后从下一个孩子开始,再从1开始数,如此不断地数下去,只到只剩下最后一个孩子,问剩下的孩子是几号?
输入
输入为一组整数对,每个整数对占一行,整数对的第一个整数表示m,即孩子的个数,第二个整数表示n,即被数到n的孩子将离开。 0<m<10000, n>0 输入以0 0作为结束。
输出
每组整数对输出一个结果整数,每个输出占一行。 最后一行输入0 0不产生输出。
样例输入 Copy
8 3
5 2
0 0
样例输出 Copy
7
3
#include<stdio.h>
struct stu
{
int date;
struct stu *next;
};
void main()
{
struct stu s[10000];
int i,n,m,k;
for(;;)
{
struct stu *head,*p;
k=0;
scanf("%d%d",&n,&m);
if(m==0&&n==0)
break;
for(i=0;i<n;i++)
{
if(i==n-1)
{
s[i].date=i+1;
s[i].next=&s[0];
}
else
{
s[i].date=i+1;
s[i].next=&s[i+1];
}
}
head=&s[0];
p=head;
i=1;
while(k!=n-1)
{
if((p->date)!=0)
{
if(i%m==0)
{
p->date=0;
k=k+1;
}
i=i+1;
}
p=p->next;
}
p=head;
for(i=0;i<n;i++)
{
if(p->date!=0)
printf("%d\n",p->date);
p=p->next;
}
}
}