题目:
There are N people, numbered from 1 to N, sitting around in a circle. Counted from the NO.1, the M th people should leave the game. Then, from the next one, the counting loop will go on. After several loops, there will be only on guy left. Writing a program to calculate who is the last people.
输入格式:
Two integers, separated by commas. The first integer represents N individuals (0<N), the second integer represents M (0<M<=N).
。输出格式:
N integers, separated by commas. These numbers indicate the order of the person to leave the circle, with their numbers.
输入样例:
在这里给出一组输入。例如:
5,1
输出样例:
在这里给出相应的输出。例如:
2,4,1,5,3
代码如下:
#include <stdio.h>
#include <malloc.h>
struct Node
{
int data;
struct Node *pNext;
};
struct Node *CreatList(int len) // 构建没有头结点的循环列表
{
struct Node *pHead = (struct Node *)malloc(sizeof(struct Node));
struct Node *pTail = NULL;
for (int i = 0; i < len; i++)
{
struct Node *pNew = (struct Node *)malloc(sizeof(struct Node));
pNew->data = i + 1;
if (pTail)
{
pNew->pNext = pHead;
pTail->pNext = pNew;
pTail = pNew;
}
else
{
pTail = pNew;
pHead = pTail;
}
}
return pHead;
}
int main()
{
int len, cnt;
scanf("%d,%d", &len, &cnt);
struct Node *p = CreatList(len);
while (p->pNext != p)
{
for (int i = 1; i < cnt; i++)
{
p = p->pNext;
}
printf("%d,", p->pNext->data);
p->pNext = p->pNext->pNext;
p = p->pNext;
}
printf("%d", p->data);
}