本文目录一览:
猴子选大王,C语言描述 请相信解释我的代码!
给你原文做了注释。还不懂hi我
#include stdio.h
#includemalloc.h
typedef struct LNode
{
int num;
struct LNode *next;
}LNode, *LinkList; //定义结点
LinkList InitList(LinkList L,int n) //初始化循环链表
{
LinkList p,q;
int i;
L = (LinkList)malloc(sizeof(LNode)); //头结点
L-num = 1; //一号猴子
q=L;
for(i = 2; i = n; i++) //从二号猴子开始生成结点
{
p = (LinkList)malloc(sizeof(LNode));
p-num = i;
q-next=p;
q=p;
}
q-next = L; //使链表循环起来
return L;
}
void ListDelete_L(LinkList L,int n)
{
LinkList p,q;
int j=1; //j为计数器
p=L;
while(p-next!=p) //p-next=p时是只剩一个结点。
{
while(j!=n-1) //当j=n-1时应该将该结点的下一个结点删除。当就j!=n-1时就应该指针向后移,同时计数器加一
{
p=p-next;
j++;
}
q=p-next; //q即为被点到的猴子
p-next=p-next-next; //删除q结点
printf("%d\n",q-num);
free(q);//释放
j=0; //计数器清零,重新开始计数
}
printf("%d",p-num);//此时的结点就是大王
free(p);
}
int main()
{
LinkList L=NULL;
int n,m,e=0;
printf("请输入猴子个数:");
scanf("%d",m);
printf("请输入n值:");
scanf("%d",n);
if(mn){printf("m应该 大于n请重新输入");return 0 ;
}
L=InitList(L,m);
printf("出列的顺序为:");
ListDelete_L( L,n);
return 0;
}
C语言程序设计,猴子选大王
#includestdio.h
#includestdlib.h
main()
{ int a[50];
int i,j,M,N,t=0;
printf("input two number.\n");
scanf("%d %d",N,M);
for(i=0;iN;i++)
a[i]=i+1;
for(j=1,i=0;;j++,i++)
{
if(i==N)i=0;
if(a[i]==0){j--;continue;}
if(j%M==0){a[i]=0;t++;}
if(N-t==1)break;
}
for(i=0;iN;i++)
if(a[i]!=0) printf("猴王是第%d个.\n",a[i]);
system("pause");
}
试试...
求高手帮忙调试一下“猴子选大王C语言代码”诚谢!本人新手学C语言
#include stdio.h
#define SHUMU 10
void main()
{
int i=0, weizhi=0,shumu=10;
int houzi[SHUMU]={1,1,1,1,1,1,1,1,1,1};
while(shumu1)
{
i=1;
while(i6)
{ weizhi++;
if(weizhi9) weizhi=weizhi-10;
if(houzi[weizhi]=1) i++;
}
houzi[weizhi]=0;
shumu--;
}
i=0;
while(i10)
{
printf("第%d只猴子是大王\n", i);
i++;
}
}