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

java編程約瑟夫問題實例分析

 更新時間:2017年12月25日 16:16:39   作者:Mu_TQ  
這篇文章主要介紹了java編程約瑟夫問題實例分析,具有一定借鑒價值,需要的朋友可以參考下。

一、簡介

約瑟夫問題(有時也稱為約瑟夫斯置換,是一個出現在計算機科學和數學中的問題。在計算機編程的算法中,類似問題又稱為約瑟夫環(huán)。又稱“丟手絹問題”.)

例子:

len個人圍成一個圈,玩丟手絹游戲。從第k個人開始,從1開始數數,當數到m時,數m的人就退出圈子,當圈子只剩下一個人為止。

問題分析與算法設計

約瑟夫問題并不難,但求解的方法很多;題目的變化形式也很多。這里給出一種實現方法。

題目中l(wèi)en個人圍成一圈,因而啟發(fā)我們用一個循環(huán)的鏈來表示,可以使用結構數組來構成一個循環(huán)鏈。結構中有兩個成員,其一為指向第一個孩子的頭節(jié)點,另一個為作為判斷的節(jié)點temp(負責跑龍?zhí)祝?/p>

具體代碼如下:

package demo11;
/**
      * 約瑟夫問題, 化為丟手絹
      * 
      * @author tianq 思路:建立一個Child類 一個循環(huán)列表類CyclLink
      */
public class demo11 {
	public static void main(String[] args) {
		CyclLink cyclink = new CyclLink();
		cyclink.setLen(15);
		cyclink.createLink();
		cyclink.setK(2);
		cyclink.setM(2);
		cyclink.show();
		cyclink.play();
	}
}
// 先建立一個孩子類
class Child {
	// 孩子的標識
	int no;
	Child nextChild;
	// 指向下一個孩子
	public Child(int no) {
		// 構造函數給孩子一個id
		this.no = no;
	}
}
class CyclLink {
	// 先定義一個指向鏈表第一個小孩的引用
	// 指向第一個小孩的引用,不能動
	Child firstChild = null;
	Child temp = null;
	int len = 0;
	// 表示共有幾個小孩
	int k = 0;
	//開始的孩子
	int m = 0;
	//數到幾推出
	// 設置m
	public void setM(int m) {
		this.m = m;
	}
	// 設置鏈表的大小
	public void setLen(int len)
	  {
		this.len = len;
	}
	// 設置從第幾個人開始數數
	public void setK(int k) {
		this.k = k;
	}
	// 開始play
	public void play() {
		Child temp = this.firstChild;
		// 1.先找到開始數數的人
		for (int i = 1; i < k; i++) {
			temp = temp.nextChild;
		}
		while (this.len != 1) {
			// 2.數m下
			for (int j = 1; j < m; j++) {
				temp = temp.nextChild;
			}
			// 找到要出圈的前一個小孩
			Child temp2 = temp;
			while (temp2.nextChild != temp) {
				temp2 = temp2.nextChild;
			}
			// 3.將數到m的小孩,退出
			temp2.nextChild = temp.nextChild;
			// 讓temp指向下一個數數的小孩
			temp = temp.nextChild;
			// this.show();
			this.len--;
		}
		// 最后一個小孩
		System.out.println("最后出圈" + temp.no);
	}
	// 初始化環(huán)形鏈表
	public void createLink() {
		for (int i = 1; i <= len; i++) {
			if (i == 1) {
				// 創(chuàng)建第一個小孩
				Child ch = new Child(i);
				this.firstChild = ch;
				this.temp = ch;
			} else {
				if (i == len) {
					// 創(chuàng)建第一個小孩
					Child ch = new Child(i);
					temp.nextChild = ch;
					temp = ch;
					temp.nextChild = this.firstChild;
				} else {
					// 繼續(xù)創(chuàng)建小孩
					Child ch = new Child(i);
					temp.nextChild = ch;
					temp = ch;
				}
			}
		}
	}
	// 打印該環(huán)形鏈表
	public void show() {
		Child temp = this.firstChild;
		do {
			System.out.print(temp.no + " ");
			temp = temp.nextChild;
		}
		while (temp != this.firstChild);
	}
}

結果:

總結

以上就是本文關于java編程約瑟夫問題實例分析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • Java兩大工具庫Commons和Guava使用示例詳解

    Java兩大工具庫Commons和Guava使用示例詳解

    這篇文章主要為大家介紹了Java兩大工具庫Commons和Guava使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • java datetime數據類型去掉時分秒的案例詳解

    java datetime數據類型去掉時分秒的案例詳解

    在Java中,如果我們想要表示一個日期而不包括時間(時分秒),我們通常會使用java.time包中的LocalDate類,這篇文章主要介紹了java datetime數據類型去掉時分秒,需要的朋友可以參考下
    2024-06-06
  • MyBatis中動態(tài)SQL的使用指南

    MyBatis中動態(tài)SQL的使用指南

    MyBatis 是一個流行的持久層框架,它通過 XML 或注解將接口方法與 SQL 映射在一起,動態(tài) SQL 是 MyBatis 的一大特性,它使得構建靈活的查詢變得簡單,本文將通過一個 User 表的示例,介紹 MyBatis 中常用的動態(tài) SQL 方法,需要的朋友可以參考下
    2024-09-09
  • Spring事件監(jiān)聽機制觀察者模式詳解

    Spring事件監(jiān)聽機制觀察者模式詳解

    這篇文章主要為大家介紹了Spring事件監(jiān)聽機制觀察者模式實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • MybatisPlus實現數據權限隔離的示例詳解

    MybatisPlus實現數據權限隔離的示例詳解

    Mybatis Plus對Mybatis做了無侵入的增強,非常的好用,今天就給大家介紹它的其中一個實用功能:數據權限插件,感興趣的可以跟隨小編一起了解下
    2024-04-04
  • 解讀@Bean和@Autowired、@Resource之間的區(qū)別

    解讀@Bean和@Autowired、@Resource之間的區(qū)別

    這篇文章主要介紹了@Bean和@Autowired、@Resource之間的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Java編程倒計時實現方法示例

    Java編程倒計時實現方法示例

    這篇文章主要介紹了Java編程倒計時實現的三個示例,三種實現方法,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • IDEA啟動Tomcat報Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED的解決方法

    IDEA啟動Tomcat報Unrecognized option: --add-opens=java

    這篇文章主要為大家介紹了解決IDEA啟動Tomcat報Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED的方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • IntelliJ IDEA中ajax開發(fā)實現分頁查詢示例

    IntelliJ IDEA中ajax開發(fā)實現分頁查詢示例

    這篇文章主要介紹了IntelliJ IDEA中ajax開發(fā)實現分頁查詢,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • java啟動線程的3種方式對比分析

    java啟動線程的3種方式對比分析

    這篇文章主要為大家對比分析了java啟動線程的3種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論

天台县| 汕尾市| 沈阳市| 大田县| 育儿| 宣恩县| 馆陶县| 清新县| 北辰区| 临安市| 延安市| 依兰县| 库车县| 宝山区| 诸城市| 彭州市| 涿鹿县| 南宫市| 安徽省| 宣威市| 丹棱县| 区。| 东乌珠穆沁旗| 全椒县| 丹凤县| 汉川市| 舞钢市| 淄博市| 黄山市| 三河市| 道孚县| 石首市| 石家庄市| 库尔勒市| 瓮安县| 巴南区| 霍林郭勒市| 泽州县| 东方市| 垣曲县| 宜阳县|