欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、簡介

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

例子:

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

問題分析與算法設(shè)計

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

題目中l(wèi)en個人圍成一圈,因而啟發(fā)我們用一個循環(huán)的鏈來表示,可以使用結(jié)構(gòu)數(shù)組來構(gòu)成一個循環(huán)鏈。結(jié)構(gòu)中有兩個成員,其一為指向第一個孩子的頭節(jié)點,另一個為作為判斷的節(jié)點temp(負(fù)責(zé)跑龍?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 {
	// 孩子的標(biāo)識
	int no;
	Child nextChild;
	// 指向下一個孩子
	public Child(int no) {
		// 構(gòu)造函數(shù)給孩子一個id
		this.no = no;
	}
}
class CyclLink {
	// 先定義一個指向鏈表第一個小孩的引用
	// 指向第一個小孩的引用,不能動
	Child firstChild = null;
	Child temp = null;
	int len = 0;
	// 表示共有幾個小孩
	int k = 0;
	//開始的孩子
	int m = 0;
	//數(shù)到幾推出
	// 設(shè)置m
	public void setM(int m) {
		this.m = m;
	}
	// 設(shè)置鏈表的大小
	public void setLen(int len)
	  {
		this.len = len;
	}
	// 設(shè)置從第幾個人開始數(shù)數(shù)
	public void setK(int k) {
		this.k = k;
	}
	// 開始play
	public void play() {
		Child temp = this.firstChild;
		// 1.先找到開始數(shù)數(shù)的人
		for (int i = 1; i < k; i++) {
			temp = temp.nextChild;
		}
		while (this.len != 1) {
			// 2.數(shù)m下
			for (int j = 1; j < m; j++) {
				temp = temp.nextChild;
			}
			// 找到要出圈的前一個小孩
			Child temp2 = temp;
			while (temp2.nextChild != temp) {
				temp2 = temp2.nextChild;
			}
			// 3.將數(shù)到m的小孩,退出
			temp2.nextChild = temp.nextChild;
			// 讓temp指向下一個數(shù)數(shù)的小孩
			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);
	}
}

結(jié)果:

總結(jié)

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

相關(guān)文章

  • RestTemplate對HttpClient的適配源碼解讀

    RestTemplate對HttpClient的適配源碼解讀

    這篇文章主要為大家介紹了RestTemplate對HttpClient的適配源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Springboot通過Scheduled實現(xiàn)定時任務(wù)代碼

    Springboot通過Scheduled實現(xiàn)定時任務(wù)代碼

    這篇文章主要介紹了Springboot通過Scheduled實現(xiàn)定時任務(wù)代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java文件與IO流操作原理詳細(xì)分析

    Java文件與IO流操作原理詳細(xì)分析

    在java中提供有對于文件操作系統(tǒng)的支持,這個支持在java.io.File類中進(jìn)行了定義,也就是說在整個java.io包中File類是唯一一個與文件本身操作有關(guān)的類(創(chuàng)建,刪除,重命名)有關(guān)的類,而如果想要進(jìn)行File類的操作,我們需要提供有完整的路徑支持,而后可以調(diào)用相應(yīng)的方法進(jìn)行處理
    2022-09-09
  • Java從數(shù)據(jù)庫中讀取Blob對象圖片并顯示的方法

    Java從數(shù)據(jù)庫中讀取Blob對象圖片并顯示的方法

    這篇文章主要介紹了Java從數(shù)據(jù)庫中讀取Blob對象圖片并顯示的方法,實例分析了Java讀取數(shù)據(jù)庫中Blob對象圖片的技巧與操作方法,需要的朋友可以參考下
    2015-02-02
  • Java后臺防止客戶端重復(fù)請求、提交表單實現(xiàn)原理

    Java后臺防止客戶端重復(fù)請求、提交表單實現(xiàn)原理

    這篇文章主要介紹了Java后臺防止客戶端重復(fù)請求、提交表單實現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 使用Jacoco獲取 Java 程序的代碼執(zhí)行覆蓋率的步驟詳解

    使用Jacoco獲取 Java 程序的代碼執(zhí)行覆蓋率的步驟詳解

    這篇文章主要介紹了使用Jacoco獲取 Java 程序的代碼執(zhí)行覆蓋率的步驟詳解,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • JDK10新特性之本地變量類型var的深入理解

    JDK10新特性之本地變量類型var的深入理解

    這篇文章主要給大家介紹了J關(guān)于DK10新特性之本地變量類型var的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用JDK10具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • SpringCloud-Hystrix-Dashboard客戶端服務(wù)監(jiān)控的實現(xiàn)方法

    SpringCloud-Hystrix-Dashboard客戶端服務(wù)監(jiān)控的實現(xiàn)方法

    這篇文章主要介紹了SpringCloud-Hystrix-Dashboard客戶端服務(wù)監(jiān)控的實現(xiàn)方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 4位吸血鬼數(shù)字的java實現(xiàn)思路與實例講解

    4位吸血鬼數(shù)字的java實現(xiàn)思路與實例講解

    今天小編就為大家分享一篇關(guān)于4位吸血鬼數(shù)字的java實現(xiàn)思路與實例講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • SpringBoot整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證

    SpringBoot整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證

    Spring Security是一個可以為Java應(yīng)用程序提供全面安全服務(wù)的框架,同時它也可以輕松擴(kuò)展以滿足自定義需求,本文主要介紹了SpringBoot整合SpringSecurity和JWT和Redis實現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證,感興趣的可以了解一下
    2023-11-11

最新評論