亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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ù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • RestTemplate對HttpClient的適配源碼解讀

    RestTemplate對HttpClient的適配源碼解讀

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

    Springboot通過Scheduled實現定時任務代碼

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

    Java文件與IO流操作原理詳細分析

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

    Java從數據庫中讀取Blob對象圖片并顯示的方法

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

    Java后臺防止客戶端重復請求、提交表單實現原理

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

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

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

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

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

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

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

    4位吸血鬼數字的java實現思路與實例講解

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

    SpringBoot整合SpringSecurity和JWT和Redis實現統一鑒權認證

    Spring Security是一個可以為Java應用程序提供全面安全服務的框架,同時它也可以輕松擴展以滿足自定義需求,本文主要介紹了SpringBoot整合SpringSecurity和JWT和Redis實現統一鑒權認證,感興趣的可以了解一下
    2023-11-11

最新評論