zoukankan      html  css  js  c++  java
  • 1073 约瑟夫环

    1073 约瑟夫环

    基准时间限制:秒 空间限制:131072 KB 

    N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。

    例如:N = 3K = 22号先出列,然后是1号,最后剩下的是3号。

    Input

    2个数NK,表示N个人,数到K出列。(2 <= N, K <= 10^6)

    Output

    最后剩下的人的编号

    Input示例

    3 2

    Output示例

    3

    import java.util.Scanner;
    public class Main {
        static int fun(int m,int k,int i){
            
            if(i==1)
                return (m+k-1)%m;
            else
                return (fun(m-1,k,i-1)+k)%m;
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner sc=new Scanner(System.in);
            while(sc.hasNext()){
                int m=sc.nextInt();
                int k=sc.nextInt();
                System.out.println(fun(m,k,m)+1);
            }
            sc.close();
    
        }
    
    }

    f(m,k,i)m个人的环,报数为k,第i个人出环的编号,则f(10,3,10)是我们要的结果

    i=1时,  f(m,k,i) = (m+k-1)%m

    i!=1时,  f(m,k,i)= ( f(m-1,k,i-1)+k )%m

    ---------------------------------------------------------------------------------------------------------------------

    解法2

    ----------------------------------------

    package 约瑟夫环的数学优化方法;
    
    import java.util.Scanner;
    /*
     为了讨论方便,先把问题稍微改变一下,并不影响原意:问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。
     */
    
    public class Main {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int n,m,i,s=0;
            Scanner sc=new Scanner(System.in);
            n=sc.nextInt();
            m=sc.nextInt();
            for(i=2;i<=n;i++){
                s=(s+m)%i;
            }
            System.out.println(s+1);
    
        }
    
    }
  • 相关阅读:
    selenium登录csdn,urllib抓取数据
    selenium登录12306,requests抓取数据
    加一
    最后一个单词的长度
    最大子序和
    搜索插入位置
    实现strStr()
    二分查找
    内存对齐
    is_pod类型
  • 原文地址:https://www.cnblogs.com/watchfree/p/5350741.html
Copyright © 2011-2022 走看看