⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 猴子选大王.txt

📁 数据结构的线性表及其应用
💻 TXT
字号:
约瑟夫问题的实现:n只猴子要选猴王,所有猴子按1,2,…,n编号围坐一圈,从第1号开始按1,2, …,m报数,凡报到m号的猴子退出圈外,如此循环报数,直到圈内剩下一只猴子时,这个猴子就是猴王。编写一个程序实现上述过程,n和m由键盘输入。

   采用顺序表存储。使用一个数组A,最多可存放MaxSize个元素,初始时A[i]可存放猴子的编号i+1,计数器count的值为0。从A[i]开始循环报数,每报一次,计数器的值加1,报到m时便打印出A[i]的值,同时将A[i]的值改为0,计数器的值重新赋为0。该过程一直进行到n只猴子全部退出到圈外为止,最后退出的便于是猴王。实现本题功能的程序如下:


   /*顺序表应用*/
  #include<stdio.h>
int main(){/*定义变量*/
       int A[10000]={0};                    /*这里定义一个数组存放猴子退出状态,
                                          1为已经退出,0为未退出,初始值都为0*/
       int a = 0;                                          /*a为数的数,初始值为0*/
       int n=0,b=0,Count=0,m=0;                 /*n为猴子的总数,初始值为0
                                                  b为剩下猴子数,初始值为0
                                                  Count为循环计数量,初始值为0*/
       printf("输入猴子总数n:");
       scanf("%d",&n);                                    
       printf("数到哪个编号的猴子退出:");
       scanf("%d",&m);
       b=n;
       while( b > 1 ){                         /*剩下的猴子多余1个,循环*/
       if( A[Count] == 0 ){    /*没有退出的猴子才数数*/
       a++;                     /*猴子数数*/                                  
 }
       if( a == m){                            /*数到m*/
       A[Count] = 1;             /*让数到m的猴子退出*/
       b--;                          /*剩下的猴子减一*/
       a = 0;                             /*重新数数*/
      }
       Count++; 
       if( Count == n ){    /*如果数到最后一只猴子了,从头再开始*/
       Count = 0;
      }            
     }
/*找到最后一只猴子的位置,并打印*/
       a=0; 
       while( 1 ){
       if( A[a++] == 0 ){        /*找到没有退出的猴子*/
       printf("被选为猴王的猴子的编号是:%d\n",a);
       break;    
      }    
    }
   }

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -