C语言编程问题,使用链表

来源:百度知道 编辑:UC知道 时间:2024/05/30 08:55:37
13个人围成一圈,从第一个人开始顺序报号1.2.3,凡是报到3者推出圈子,找出最后留在圈子中的人原来的序号
我觉得开始第一印象是使用链表,现在看不一定,只要能够把他运行出来就好了,谢谢大家~

修改M和N值可以找出同类型的不通人数报数出圈的最后一个人。
#include <stdio.h>
#include <stdlib.h>
#define N 13 //一圈总的人数
#define M 3 //报的数字
int main()
{ int p[N], n=N, s=1, m=M ;
int i,j,k,w;
for(i=1;i<=n;i++) p[i-1]=i;
for(i=n;i>=2;i--)
{
s=(s+m-1)%i;
if(s==0) s=i;
w=p[s-1];
for(j=s;j<=i-1;j++) p[j-1]=p[j];
p[i-1]=w;
}
printf("出圈顺序:\n");
for(i=n-1;i>=0;i--)
printf("%5d",p[i]);
printf("\n");
printf("最后留圈中的人的序号是:%d\n",p[n-n]);
return 0;
}

#include <iostream.h>
#define Cir 14
void main()
{
int cir[Cir], k=13,c=0;;
for(int i=1;i<Cir;i++)
cir[i]=1;//各位都在
cout<<"出圈顺序是";
while (k>1)
{
for(int i=1;i<Cir;i++)
{
c+=cir[i];//报数
if(c