求解编程题M

来源:百度知道 编辑:UC知道 时间:2024/05/28 00:35:26
设有n个人围坐在圆桌周围,从某个位置开始用自然数经行编号1,2,```,n,然后编号为k的人从1开始报数,数到马的人便出列;下一个人(第m+1个)又从1开始报数,数到m的人便是第二个出列的人。如此继续下去,知道最后一个人出列为止。要求输出这个出列顺序。

已经编译运行通过:

#include<stdio.h>
#include<conio.h>

struct node
{
int data;
struct node *next;
};

void main()
{
int n=0,m=0,k=0,i=0;
struct node * head, *s, *temp;

printf("请输入n: ");
scanf("%d",&n);
printf("请输入m: ");
scanf("%d",&m);
printf("请输入k: ");
scanf("%d",&k);

head = new struct node;//第一个人的信息
head->data = 1;
temp = head->next = head;
for (i=2; i<=n; i++)//所有人的序号信息
{
s = new struct node;
s->data = i;
s->next = head;
temp->next = s;
temp = s;
}

printf("出列顺序为: \n");

s = head;

for(i=1;i<k;i++) s = s->next;

while (s->next != s)
{
for (i=1; i<m; i++)//先数m-1个数
{
temp = s;
s = s->next;
}