猴子选大王的编程,数据结构方法

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/25 08:30:08
猴子选大王的编程,数据结构方法
xX[SF+i206|1/i}LGdƺX6fL'C$4nBi3d@~LԿ#L$#!3%ힳ;߹.ץ!{QA9ٸ~obE{mwzZv%woxמ#c{UQߠɧ"*{ /^6v򞶼]?x :jZ[zy m=C_QGemv\[][x/T,1c;񈀷1}.k3E`)+q(?Qi}C+#ӡw,aif*BD^[k0G2 <(b5TOk[}~0߀2mG|Ӏ# 9C<0epl7@ UO6(*3ǚ_:W`^!HޜTT5x临SFQbLr< XfSԛ9gXl%IT8sJ}x^`m' 'n0s~rc^Uyx_@I +JjWRWyoʺqsalĚEYCYmY۩9urwjixL ͂|-7~PW'Zۅ7A 2g}:z4*§VT E7_9RL*XN8MW ᚝ՖEBSBs?^-:2I~+o2mݔeQ}cALzWb!4,l'-+jA{5?-bZsʞF/vy+][LBU]|KthG+Vuo5}/T.'>ˊSS8<|cv܅GLz [k^JQqPNHrW D$yEqVT- ; +|r9ξ0rqk ©| qrp$u猼taXɕ)WCPJ}q,l{Byl'7 7 ꭽ $vG gz ,22%rn9Pcp9![0pLN ܚȨuEqhKSnMI:\ẌOXQ75D(EI]n?KL.gUU fYNʊf9w=$ ɠH4Nt$#T&e Xbx4HD8I2 GC I3@%qXfN~ hobt,t4FH" 8O CL8%+H0dK?EXW

猴子选大王的编程,数据结构方法
猴子选大王的编程,数据结构方法

猴子选大王的编程,数据结构方法
如果给好评的话,麻烦写一句:
章鱼桶是个好人


不确定具体题目,从网上摘抄来的题目:
  山上有n只猴子要选大王,选举办法如下:所有猴子从1到n进行编号并围坐一圈,从第一号开始按顺序1,2,...m继续报数,凡是报m号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号.


这个题目是循环链表的应用,循环链表参见:
#include <stdio.h>
#include <stdlib.h>
struct CircularLinkedListElement
{
 int position;
 CircularLinkedListElement* next;
};
int main(void)
{
 /*
 变量声明
 */
 int n,m;
 int i;
 CircularLinkedListElement* start;
 CircularLinkedListElement* p;
 CircularLinkedListElement* q;
 int step;
 /*
 读入猴子数量n,以及淘汰的号码m
 注意输入的是正整数,为了满足一般从0开始计数的规律,读入后将n、m均减一
 */
 printf("Please enter monkeys number n: ");
 scanf("%d",&n);
 n--;
 if(n<=0)
 {
  fprintf(stderr,"**Error: Monkey's number should be positive.\n");
  return 1;
 }
 printf("Please enter obsolete number m: ");
 scanf("%d",&m);
 if(m<=0)
 {
  fprintf(stderr,"**Error: Obsolete number should be poistive.\n");
  return 1;
 }
 m--;
 
 /*
 创建循环链表
 */
 start=(CircularLinkedListElement*)malloc(sizeof(CircularLinkedListElement));
 if(start==NULL)
 {
  fprintf(stderr,"**Error: malloc error.\n");
  return 1;
 }
 start->position=0;
 start->next=NULL;
 p=start;
 for(i=1;i<=n;i++)
 {
  q=(CircularLinkedListElement*)malloc(sizeof(CircularLinkedListElement));
  if(q==NULL)
  {
   fprintf(stderr,"**Error: malloc error.\n");
   return 1;
  }
  q->position=i;
  q->next=NULL;
  p->next=q;
  p=q;
 }
 p->next=start;
 
 /*
 开始淘汰猴子
 */
 step=1;
 while(start->next!=start)
 {
  printf("#step %d\n",step++);
  printf("Current monkeys: ");
  p=start;
  while(p->next!=start)
  {
   printf("%d ",p->position+1);
   p=p->next;
  }
  printf("%d\n",p->position+1);
  p=start;
  for(i=0;i<(m-1);i++)
   p=p->next;
  q=p->next;
  p->next=q->next;
  start=q->next;
  printf("Obsolete monkey is: %d\n",q->position+1);
  free(q);
 }
 /*
 输出猴王
 */
 printf("The monkey king is %d.\n",start->position+1);
 return 0;
}
 英文系统,所以输出都写的是英文,见谅