男声优哪个帅:C的小问题?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/03 02:16:05
C语言的题目为:编写一个程序对几个猴子进行报数为N,其中报到N的猴子出列。请输出这样的出列顺序。

循环链表,比楼上的简单多了:其中M为报数的最大值,N为猴子数
#define N 11
#define M 3
#include "stdio.h"
#define NULL 0
struct person
{
int num;
struct person *next;
};
main()
{
struct person per[N],*p,*previous;
int i;
for (i=0;i<N;i++)
{
if(i==N-1){per[i].num=N;per[i].next=&per[0];}
else {per[i].num=i+1;per[i].next=&per[i+1];}
}
p=per;
for (i=1;;i++)
{
if (i==M+1) i=1;
if (i==M)
{
previous->next=p->next;
printf("%4d",p->num);
}
previous=p;
p=p->next;
if (p==previous) break;
}
printf("\nthe final person is:%d",p->num); getchar();
}

这个是什么意思,说详细点,是只报一次数,还是要报到全部都出列

约瑟夫环问题:
#include <stdlib.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node *next;
}LNode;

main()
{
LNode* Create(int,int);
LNode* GetNode(LNode *);
int Print(LNode *,int);
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;
};

LNode* Create(int n,int k)/*创建循环链表*/
{
int start=k-1;
LNode *s,*p,*L=0,*t;
if (start==0) start=n;
while (n!=0)
{
s=(LNode *)malloc(sizeof(LNode));
if (L==0) 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);
}

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