設有n個人圍坐一圈並按順時針方向從1到n編號,從第1個人開始進行1到m的報數,報數到第個m人,此人出圈,再從他的下一個人重新開始1到m的報數,如此進行下去直到所剩下一人為止。
Input
輸入多行,每行2個數,分別表示n和m.
Output
計算每一行中最後剩下這個人的編號.
我的代碼:
#include
#include
int main(void)
{
int n, m;
int i;
struct link
{
int number;
struct link *next;
};
struct link * head = NULL, * p = NULL, * pr;
freopen("1.txt", "r", stdin);
while(scanf("%d %d", &n, &m) != EOF)
{
for(i=n; i>0; i--)
{
p = (struct link *)malloc(sizeof(struct link));
p->number = i;
p->next = head;
head = p;
}
for( ; ; )
{
if(p->next == NULL)
{
p->next = head;
break;
}
else
{
p = p->next;
}
}
p = head;
if(m>=2)
{
while(p->next != p)
{
for(i=0; i
{
p = p->next;
}
pr = p->next;
p->next = pr->next;
p = pr->next;
free(pr);
}
printf("%d\n", p->number);
free(p);
}
else
{
printf("%d\n", n);
}
}
return 0;
}
文件內容: 50 3
5 11
程序結果:
11
讀取完了,但是你寫的不對,把之前的沖掉了。