paypal題目

約瑟夫環問題的變形, 主要是一個模擬的過程,考察點在於每次退出的人的序號是變化的。所以這一個問題較爲簡單。在面試或筆試過程中,屬於一道簽到題目,必須要求自己能夠快速寫出來。

import java.util.Scanner;

/**
 * Created by ql on 2019/6/24.
 */
public class Algorithm {
    static boolean isRemove[];
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int m=sc.nextInt();
        isRemove=new boolean[n];
        int result= XingCun(n,m);
        System.out.println(result);
    }
    public static int XingCun(int n,int m){
        int p=1;
        for (int i=1,r=n;i<=n;i++,r--) {
            int k=1;
            for (int j=1;j<=i;j++){
                k=(k*m)%r;
            }
            if (k==0){
                //若k剛好爲0,說明需要刪除最後一個元素
                k=r;
            }
            while (true){
                if (!isRemove[p]){
                    k--;
                    if (k==0){
                        isRemove[p]=true;
                        break;
                    }
                }
                p++;
                if (p>n){
                    p=1;
                }
            }
        }
        return p;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章