jose1.cpp
资源名称:c.rar [点击查看]
上传用户:puke2000
上传日期:2022-07-25
资源大小:912k
文件大小:1k
源码类别:

C#编程

开发平台:

Visual C++

  1. //***************************
  2. //**    Josephus问题解法1  **
  3. //**    jose1.cpp          **
  4. //***************************
  5. #include <iostream.h>
  6. void main()
  7. {
  8.   //建立小孩数组
  9.   const int num=10;    //小孩数
  10.   int interval;        //每次数interval个小孩,便让该小孩离开
  11.   int a[num];          //小孩数组
  12.   //给小孩编号
  13.   for(int i=0; i<num; i++)   //小孩的编号只与小孩数有关
  14.     a[i]=i+1;
  15.   //输入数小孩间隔
  16.   cout <<"please input the interval: ";    //输入一个数小孩个数
  17.   cin >>interval;
  18.   //将全体参加的小孩输出
  19.   for(int i=0; i<num; i++)    //顺序输出开始时的小孩编号
  20.     cout <<a[i] <<",";
  21.   cout <<endl;
  22.   int k=1;      //标识处理第k个离开的小孩
  23.   int i=-1;     //数组下标(下一个值0就是第一个小孩的下标)
  24.   //处理获胜前的小孩
  25.   while(1){
  26.     //在圈中数interval个小孩
  27.     for(int j=0; j<interval; ){
  28.       i=(i+1)%num;       //对下标加1求模
  29.       if(a[i]!=0)        //如果该元素的小孩在圈中,则承认数数有效
  30.         j++;
  31.     }
  32.     if(k==num) break;    //该小孩是最后一个(胜利者)吗?
  33.     cout <<a[i] <<",";   //输出离开的小孩之编号
  34.     a[i]=0;              //标识该小孩已离开
  35.     k++;                 //准备处理下一个圈中小孩
  36.   }
  37.   //break语句跳转到此
  38.   cout <<"nNo." <<a[i] <<" boy've won.n";    //输出胜利者
  39. }