今天在群里看到有人提到一个猴子选大王的问题,题目如下:
 
                            题目
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
 
不知道网上有没有这个题目的答案,我自己写了个程序,可以算出哪个猴子可以当大王!!
 
 
解决猴子选大王问题(用C,原创)_职场#include <stdlib.h>
解决猴子选大王问题(用C,原创)_职场#include <stdio.h>
解决猴子选大王问题(用C,原创)_职场 //定义链表
解决猴子选大王问题(用C,原创)_职场struct data
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场int inter;
解决猴子选大王问题(用C,原创)_职场struct data *next;
解决猴子选大王问题(用C,原创)_职场};
解决猴子选大王问题(用C,原创)_职场
解决猴子选大王问题(用C,原创)_职场 //生成链表函数
解决猴子选大王问题(用C,原创)_职场struct data *create(int num);  
解决猴子选大王问题(用C,原创)_职场
解决猴子选大王问题(用C,原创)_职场void main()
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场int n,m,t;
解决猴子选大王问题(用C,原创)_职场struct data *p,*head,*q;
解决猴子选大王问题(用C,原创)_职场m=6;   //猴子的数量
解决猴子选大王问题(用C,原创)_职场t=4;
解决猴子选大王问题(用C,原创)_职场m+=1;  //猴子的数量和最前面的表头
解决猴子选大王问题(用C,原创)_职场n=0;     //好象下面有了,这里并不需要
解决猴子选大王问题(用C,原创)_职场head=create(m);    //生成链表
解决猴子选大王问题(用C,原创)_职场p=head;
解决猴子选大王问题(用C,原创)_职场while(m>1)
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场n=0;
解决猴子选大王问题(用C,原创)_职场
解决猴子选大王问题(用C,原创)_职场while(n<t)
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场q=p;
解决猴子选大王问题(用C,原创)_职场p=p->next;
解决猴子选大王问题(用C,原创)_职场if(p->next==NULL&&(n!=t-1))     /*注意(n!=t-1)这个条件*/
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场p=head;
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场n++;
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场if(p==head->next)               //指向第一个
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场head=head->next;
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场else if(p->next==NULL)         //指向最后一个
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场q->next=NULL;
解决猴子选大王问题(用C,原创)_职场p=head;
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场else                              //其他,这三个的选择的顺序可不是随便排的
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场q->next=p->next;          //前后相连,去掉中间的
解决猴子选大王问题(用C,原创)_职场p=q;
解决猴子选大王问题(用C,原创)_职场if(p->next==NULL)        
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场p=head;
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场m--;
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场
解决猴子选大王问题(用C,原创)_职场printf("%i",p->inter);
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场
解决猴子选大王问题(用C,原创)_职场
解决猴子选大王问题(用C,原创)_职场struct data *create(int num)
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场int i,l=0;
解决猴子选大王问题(用C,原创)_职场struct data *head,*tail,*p;
解决猴子选大王问题(用C,原创)_职场head=tail=NULL;
解决猴子选大王问题(用C,原创)_职场for(i=0;i<num;i++)
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场p=(struct data*)malloc(sizeof(struct data));
解决猴子选大王问题(用C,原创)_职场p->inter=l;                         /*给每只猴子编号,猴子编号从1开始,0保留作为其它用途*/
解决猴子选大王问题(用C,原创)_职场l++;
解决猴子选大王问题(用C,原创)_职场p->next=NULL;
解决猴子选大王问题(用C,原创)_职场if(head==NULL)
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场head=tail=p;
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场else
解决猴子选大王问题(用C,原创)_职场{
解决猴子选大王问题(用C,原创)_职场tail->next=p;
解决猴子选大王问题(用C,原创)_职场tail=tail->next;
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场}
解决猴子选大王问题(用C,原创)_职场return head;     //返回表头
解决猴子选大王问题(用C,原创)_职场}