zoukankan      html  css  js  c++  java
  • 神奇的约瑟夫环

    #include<iostream>
    usingnamespacestd;
    main()
    {
    bool a[101]={0};
    intn,m,i,f=0,t=0,s=0;
    cin>>n>>m;
    do
    {
    ++t;//逐个枚举圈中的所有位置
    if(t>n)
    t=1;//数组模拟环状,最后一个与第一个相连
    if(!a[t])
    s++;//第t个位置上有人则报数
    if(s==m)//当前报的数是m
    {
    s=0;//计数器清零
    cout<<t<<'';//输出被杀人编号
    a[t]=1;//此处人已死,设置为空
    f++;//死亡人数+1
    }
    }while(f!=n);
    }
    
    
    

    n只猴子选大王,选举办法如下:从头到尾1,2,3,1,2,3……报数,凡报3的退出,余下猴子第二轮从尾到头1,2,3,1,2,3……报数,凡报3的退出...如此类推,当剩下两只猴子时,取这时报1的为王,若想当猴王,请问当初应占据什么位置?
    此题思路如下:

    首先定义结构体:一个序号,一个自己的数字;

    每变一次数字,遇见数字为三就变为0(类似于bool型的false),,,

    至于倒序,我是这样想的,让总数先取模三,然后判断第一个数是不是为0,每次查倒序的时候第一个为一,后面的定义一个for循环,自己定义序数,然后用总数减去它再取模三。

    以上写的略乱,原谅我的语文表达能力不好(其实我本人的思路就是乱的)

    *********************************************************************************************************************************************

    第二个 思路是,这个问题其实就是圆圈问题,也就是之前的尾巴

    同样定义结构体;

    首先录入多少个人,然后报到三的变为零,这个和之前的一样,不一样的主要在于倒序变得简单的多

    ***********************************************************************************************************************************************

    解决约瑟夫环的代码如下

    15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。

    #include<iostream>
    using namespace std;
    const int MAX=10050;
    struct node
    {
    	int value;
    	int next; 
    } arr[MAX];  
    int m,n;
    void init()
    {
        cin>>n>>m;
        for (int i=1;i<=n;i++)  arr[i].value=i, arr[i].next=i+1;
        arr[n].next=1;    
    }
    void work()
    {
        int now=n; //从now后边的那个人开始数数。
        for(int i=1;i<n;i++)//去掉n-1 个人。
        {              //数够m-1个人,下一个人就是要删掉的。
            for(int j=1;j<m;j++)     now=arr[now].next;
            int delnode=arr[now].next;                      //第m个就是要删掉的。
            arr[now].next=arr[delnode].next;        
        }
        cout<<arr[now].value;
    }
    
    int main()
    {
        init();
        work();
    	return 0; 
    }
     


  • 相关阅读:
    Java微信公众平台开发(一)--接入微信公众平台
    微信开发准备
    微信公众平台开发前言
    Spring------自动化装配Bean(三)
    Spring------自动化装配Bean(二)
    Spring------自动化装配Bean(一)
    单链表的基本操作
    线性表的基本操作
    Apache Hadoop各版本发布的SVN地址
    configuration on ubuntu server
  • 原文地址:https://www.cnblogs.com/supersumax/p/5882476.html
Copyright © 2011-2022 走看看