zoukankan      html  css  js  c++  java
  • 约瑟夫问题

    编号为1,2,3,......,n的n个人按顺时针方向围坐一圈,开始选一正整数m,从第一人开始,按顺时针方向自1开始顺序报数,报到m时此人出列,从他在顺时针方向的下一个人开始从1报数,如此下去,直至剩一个人,求出个人的编号
    public class Exercise
    {
     public static void main(String args[])
        {  
    int i, j, n, m;

      if(args.length != 2)  //处理参数数目不正确情况
      {

       System.out.println("Please Input a number!");
       return;
      }

      n = Integer.parseInt(args[0]);
      m = Integer.parseInt(args[1]);

      if (n <= 0 || m <= 0)
      {
       System.out.println("Paramter Error!");
       return;
      }

      int a[] = new int[n];

      for (i = 0; i < n; i++) a[i] = i + 1;

      int k = 1;   //标识处理第k个离开的人
      i = -1;    //数组下标,下一个为0,即第一个人

      while (true)
      {

       //在圈中数m个人
       for (j = 0; j < m;)
       {
        i = (i + 1) % n;
        if (a[i] != 0)   //a[i]不为0表示还没有离开
        {
         j++;
        }
       }

       if (k == n) break;  //k等于n表示只剩下一个人了

       a[i] = 0;   //表示该人离开
       k++;

      }

      System.out.println("No." + a[i] + " is the winner!");
     }
     }

  • 相关阅读:
    Sigma Function 数学 因子求和
    luogu P3800 Power收集
    LibreOJ #110. 乘法逆元
    luogu P3802 小魔女帕琪
    LibreOJ #6000. 「网络流 24 题」搭配飞行员
    LibreOJ #103. 子串查找
    LibreOJ #102. 最小费用流
    LibreOJ #109. 并查集
    BZOJ 1922: [Sdoi2010]大陆争霸
    LibreOJ #119. 最短路
  • 原文地址:https://www.cnblogs.com/elzero/p/817913.html
Copyright © 2011-2022 走看看