面试题 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数, 报数到第m个人, 此人出圈, 再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现

 设有n个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数, 报数到第m个人, 此人出圈, 再从他的下一个人重新开始1到m的报数,如此进行下去直到所有的人都出圈为止。现要求按出圈次序,给出这n个人的顺序表p。


#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>

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

LNode* Create(int n, int k) //创建循环链表
{
int start=k-1;
if(start==0) start = n;
LNode *s, *p, *L=NULL, *t;

while(n!=0)
{
s = (LNode*)malloc(sizeof(LNode));
if(L==NULL) p=s;
if(n==start) t=s;
s->data = n;
s->next = L;
L=s;
n--;
}
p->next = L;
return t;
}

LNode* GetNode(LNode *p)
{
LNode *q;
for(q=p;q->next!=p;q=q->next);
q->next = p->next;
free (p);
return (q);
}

int Print(LNode *p, int m)
{
int i;
printf("出队编号:\n");
while(p->next!=p)
{
for(i=1;i<=m;i++)
{
p=p->next;
}
printf("%3d",p->data);
p = GetNode(p);
}
printf("%3d\n", p->data);
return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
LNode *p;
int n,k,m;

do
{
printf("输入总人数:");
scanf("%d",&n);
}while(n<0);

do
{
printf("输入开始人的序号1~%d:",n);
scanf("%d",&k);
}while(k<=0||k>n);

do
{
printf("输入间隔数字:");
scanf("%d",&m);
}while(m<=0);

p=Create(n,k);
Print(p,m);

return 0;
}

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值