Description
将m个孩子从1到m编上号,按序号围坐成一个圈,从1号孩子开始数,每数到n时,被数到的孩子即离开圈子,然后从下一个孩子开始,再从1开始数,如此不断地数下去,只到只剩下最后一个孩子,问剩下的孩子是几号?
Input
输入为一组整数对,每个整数对占一行,整数对的第一个整数表示m,即孩子的个数,第二个整数表示n,即被数到n的孩子将离开。
0<m<10000, n>0
输入以0 0作为结束。
Output
每组整数对输出一个结果整数,每个输出占一行。
最后一行输入0 0不产生输出。
Sample Input
8 3
5 2
0 0
Sample Output
7
3
哪位高手帮我看看我的程序有什么错误 怎么改 谢谢!!
#include<iostream>
#include<conio.h>
using namespace std;
struct Circularlist
{
int data;
Circularlist *next;
};
typedef Circularlist *List;
int InitCircularlist( List &P)
{
P=new Circularlist;
P->next=P;
return 1;
}
int InsertAfterCircularlist( List &P, int s )
{
Circularlist *q = P->next;
for(int i=1;i<=s;i++ )
{
Circularlist *q = new Circularlist;
q->data=i;
q->next = P->next;
P->next = q;
}
return 1;
}
int DeleteAfterCircularlist(List &P )
{
Circularlist *q = P->next;
if (q!=q->next)
{
P = P->next;
delete q;
return 1;
}
else return 0;
}
int DestroyCircularlist(List &P)
{
Circularlist *q = P;
P = P->next;
delete q;
return 1;
}
int FCircularlist(List &P,int s,int n)
{
Circularlist *q = P->next;
while(q!=q->next)
for(int i=1;i<=n;i++)
{
P=P->next;
DeleteAfterCircularlist(P);
}
}
int OutputCircularlist( List &P )
{
Circularlist *q=P->next;
cout<<q->data;
return 1;
}
int main()
{
int s,n;
List P;
cin>>s>>n;
InitCircularlist (P);
InsertAfterCircularlist( P, s );
FCircularlist(P,s,n);
OutputCircularlist( P );
DestroyCircularlist(P);
getch();
return 0;
}