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

📄 约瑟夫生者死者游戏.cpp

📁 校园导游咨询参考
💻 CPP
字号:
 //约瑟夫生者死者游戏
  // 每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,
  //只有将全船一半的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,
  //并议定30个人围成一圈,由第一个人数起,依次报数,数到第9人,便把他投入大海,
  //然后再从他的下一个人数起,数到第9人,再将他扔进大海中,如此循环地进行,
  //直到剩下15个乘客为止。问哪些位置是将扔下大海的位置。

#include<iostream>
using namespace std;
struct game
  {
     int whether; //记录是否被扔下海。1表示没有被扔下海。0表示被扔下海//
     int next; //指向下一个人的指针//

   }; /*30个人,0号元素没有使用*/
struct game 
   number[31]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
int main()
   {
      int i,j,m;
       cout<<"\n";
	  cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
	  cout<<"\n";
	  cout<<"  ---------------------王萍-------------学号:054100626------------------\n";
	  cout<<"\n";
      cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
     cout<<"\n";
     cout<<"              约瑟夫生者死者游戏结果:\n";
     cout<<"\n";
      for(i=1;i<=30;i++) //初始化结构数组//
         {
            number[i].whether=1; //标志置为1,表示人都在船上//
            number[i].next=i+1; //指针指向下一个人//
         }
      number[30].next=1; //为了构成环使第30个人的指针指向第一个人//
      j=31; //j:指向已经处理完毕的数组元素,从number[i]指向的人开始计数//
      for(i=0;i<15;i++) //i:记录已经被扔下海的人数计数器//
          {
              for(m=6;;) //m:决定被扔下海的人的计数器//
              if(m<15)
                 {
                    j=number[j].next; //改指针,取下一个人//
                    m=m+number[j].whether; //计数,已扔下海的人计标记为0//
                  }
              else break; //计数到15则停止计数//
               number[j].whether=0; //标记置 0,表示该人被扔下海//
          }
      for(i=1;i<=30;i++) //输出结果//
      cout<<number[i].whether? '1':'0'; //0:被扔下海, 1:留在船上//
      cout<<"\n";
      system("pause");
       cout<<"\n";
    }

⌨️ 快捷键说明

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