最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Josephus環(huán)的四種解法(約瑟夫環(huán))基于java詳解

 更新時(shí)間:2019年09月12日 10:10:12   作者:---dgw博客  
這篇文章主要介紹了Josephus環(huán)的四種解法(約瑟夫環(huán))基于java詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

約瑟夫環(huán)

約瑟夫環(huán)(約瑟夫問題)是一個(gè)數(shù)學(xué)的應(yīng)用問題:已知n個(gè)人(以編號(hào)1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號(hào)為k的人開始報(bào)數(shù),數(shù)到m的那個(gè)人出列;他的下一個(gè)人又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。

通常解決這類問題時(shí)我們把編號(hào)從0~n-1,最后結(jié)果+1即為原問題的解

引用別人的一個(gè)圖:直觀說明問題

分析:

  • 第一步:從1開始報(bào)數(shù)為3的時(shí)候就刪除3號(hào)結(jié)點(diǎn)
  • 第二步:從4號(hào)結(jié)點(diǎn)開始報(bào)數(shù),當(dāng)為3的時(shí)候刪除6號(hào)結(jié)點(diǎn);
  • 第三步:從7號(hào)結(jié)點(diǎn)開始報(bào)數(shù),當(dāng)為3的時(shí)候刪除1號(hào)結(jié)點(diǎn);
  • 第四步:從2號(hào)結(jié)點(diǎn)開始報(bào)數(shù),當(dāng)為3的時(shí)候刪除5號(hào)結(jié)點(diǎn);
  • 第五步:從7號(hào)結(jié)點(diǎn)開始報(bào)數(shù),當(dāng)為3的時(shí)候刪除2號(hào)結(jié)點(diǎn);
  • 第六步:從4號(hào)元素開始報(bào)數(shù),當(dāng)為3的時(shí)候刪除8號(hào)結(jié)點(diǎn);
  • 第七步:又從4號(hào)開始報(bào)數(shù),當(dāng)為3的時(shí)候刪除4號(hào)結(jié)點(diǎn),此時(shí)鏈表中只有一個(gè)7號(hào)結(jié)點(diǎn),所以最后的結(jié)點(diǎn)就是7號(hào)結(jié)點(diǎn);

1.模擬解法

public class 模擬 {
  public static void main(String[] args) {
    Scanner in=new Scanner(System.in);

    //總?cè)藬?shù)
    int n=in.nextInt();
    // 數(shù)到m的那個(gè)人出列
    int m=in.nextInt();
    // 初始化為0 都沒有出去
    int [] arr=new int[n];

    //剩下的人數(shù)
    int peopleLeft=n;
    //初始化下標(biāo)
    int index=0;
    // 下標(biāo)計(jì)算器
    int count=0;
    // >0 出循環(huán)為負(fù)
    while (peopleLeft>1){
      if(arr[index]==0){
        // count為計(jì)步器 不是下標(biāo)指向
        count++;
        if(count==m){
          arr[index]=1;
          count=0;
          peopleLeft--;
        }
      }
      index++;
      if(index==arr.length){
        index=0;
      }
    }
    for (int i = 0; i < arr.length; i++) {
      if(arr[i]==0){
        System.out.println(i+1);
      }
    }
  }
}

2.遞歸解法

/**
   * 遞歸式:
   * f(1)=0; 第一個(gè)位置永遠(yuǎn)為0
   * f(i)=f(i)+m%n;
   */
  public static int yuesefu(int n,int m){
    if(n==1){
      return 0;
    }else {
      return (yuesefu(n-1,m) + m) % n;
    }
  }
  public static void main(String[] args) {
    System.out.println(yuesefu(41,3)+1);
    vailCode(41,3);
  }

  //逆推驗(yàn)證代碼
  public static void vailCode(int a,int b){
    System.out.print(b);
    int reslut;
    for (int i = a; i >=2 ; i--) {
       reslut=2;
      for (int j = i; j <=a ; j++) {
        reslut=(reslut+b)%j;
      }
      System.out.printf("->%d",reslut+1);
    }
  }

3.循環(huán)鏈表解法

public class CircularLinkedList {
  public static void main(String[] args) {
    /**
     * 節(jié)點(diǎn)類
     */
    class Node{
      private int data=1;
      private Node next;
      Node(){
        next=null;
      }
    }

    Node head,temp;
    head=new Node();
    head.data=1;

    int a=41;
    int b=3;
    // 臨時(shí)節(jié)點(diǎn)
    temp=head;
    for (int i = 0; i < a; i++) {
      Node new_node=new Node();
      new_node.data=i+1;
      temp.next=new_node;
      temp=new_node;
    }
    temp.next=head.next;
    while (head.next!=head){
      for (int i = 0; i < b-1; i++) {
        head=head.next;
      }
      System.out.print("->"+(head.data+1));
      head.next=head.next.next;
    }
    System.out.println(head.data);
  }
}

4.Collection解法

public static void main(String[] args) {
    int a=41;
    int b=3;
    LinkedList<Integer> list = new LinkedList<>();
    for (int i = 0; i < a; i++) {
      list.add(i+1);
    }
    while (list.size()>1){
      for (int i = 0; i < b-1; i++) {
        list.add(list.remove());
      }
      System.out.print("->"+list.getFirst());
      list.remove();//remve head
    }
    System.out.println(list.getFirst());
  }

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot項(xiàng)目使用aop案例詳解

    SpringBoot項(xiàng)目使用aop案例詳解

    這篇文章主要介紹了SpringBoot項(xiàng)目使用aop的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Java源碼解析TreeMap簡介

    Java源碼解析TreeMap簡介

    今天小編就為大家分享一篇關(guān)于Java源碼解析TreeMap簡介,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java日常記錄之查看Maven本地倉庫的位置

    Java日常記錄之查看Maven本地倉庫的位置

    這篇文章主要介紹了Maven本地倉庫的用途和配置方法,它提供了查看、修改本地倉庫路徑的步驟,包括檢查settings.xml文件、使用Maven命令和查看輸出日志,需要的朋友可以參考下
    2024-12-12
  • Java中Getter和Setter方法及主要區(qū)別

    Java中Getter和Setter方法及主要區(qū)別

    這篇文章主要給大家介紹了關(guān)于Java中Getter和Setter方法及主要區(qū)別的相關(guān)資料,getter和setter方法是用于封裝類中的私有屬性的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 解決mapper自動(dòng)裝配識(shí)別不了,Could not autowire.No beans of‘UserMapper‘type found

    解決mapper自動(dòng)裝配識(shí)別不了,Could not autowire.No beans&

    文章介紹了在使用MyBatisX插件和MybatisPlus自動(dòng)生成代碼后,如何解決Spring Boot項(xiàng)目中自動(dòng)注入`UserMapper`時(shí)報(bào)錯(cuò)的問題,主要方法包括在主配置類或啟動(dòng)類上添加`@MapperScan`注解,指定Mapper文件夾所在的包路徑,以及在Mapper類上添加`@Repository`注解
    2024-11-11
  • java中Class.forName的作用淺談

    java中Class.forName的作用淺談

    這篇文章介紹了java中Class.forName的作用,有需要的朋友可以參考一下
    2013-11-11
  • 使用Java實(shí)現(xiàn)通用樹形結(jié)構(gòu)構(gòu)建工具類

    使用Java實(shí)現(xiàn)通用樹形結(jié)構(gòu)構(gòu)建工具類

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)通用樹形結(jié)構(gòu)構(gòu)建工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • SpringMVC解析JSON請(qǐng)求數(shù)據(jù)問題解析

    SpringMVC解析JSON請(qǐng)求數(shù)據(jù)問題解析

    這篇文章主要介紹了SpringMVC解析JSON請(qǐng)求數(shù)據(jù)問題解析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • IntelliJ IDEA 2018 最新激活碼(截止到2018年1月30日)

    IntelliJ IDEA 2018 最新激活碼(截止到2018年1月30日)

    這篇文章主要介紹了IntelliJ IDEA 2018 最新激活碼(截止到2018年1月30日)的相關(guān)資料,需要的朋友可以參考下
    2018-01-01
  • IDEA GIT 忽略文件的最佳方式推薦

    IDEA GIT 忽略文件的最佳方式推薦

    這篇文章主要介紹了IDEA GIT 忽略文件的最佳方式推薦,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評(píng)論

衡水市| 萍乡市| 文登市| 当涂县| 嘉义市| 连南| 南漳县| 襄汾县| 纳雍县| 桦川县| 女性| 永清县| 阿拉善右旗| 兴化市| 兴海县| 丰县| 甘孜县| 乌鲁木齐县| 江永县| 米林县| 任丘市| 红桥区| 会宁县| 尚志市| 阿巴嘎旗| 谷城县| 舒兰市| 承德县| 武隆县| 全州县| 绵阳市| 天镇县| 安顺市| 咸丰县| 辽源市| 资中县| 枣强县| 丰县| 收藏| 安徽省| 诏安县|