1. บทนำ
ปัญหาของโจเซฟ (บางครั้งเรียกว่าการเปลี่ยนแปลงของโจเซฟเป็นปัญหาที่ปรากฏในวิทยาศาสตร์คอมพิวเตอร์และคณิตศาสตร์ในอัลกอริทึมการเขียนโปรแกรมคอมพิวเตอร์ปัญหาที่คล้ายกันเรียกว่าแหวนโจเซฟหรือที่เรียกว่า "ปัญหาการขว้างผ้าเช็ดหน้า")
ตัวอย่าง:
เลนเองก่อตัวเป็นวงกลมและเล่นเกมของผ้าเช็ดหน้าขว้าง เริ่มต้นจากบุคคล KTH นับจาก 1 เมื่อนับ M คนที่นับ M จะออกจากวงกลมจนกว่าจะมีเพียงคนเดียวที่เหลืออยู่ในวงกลม
การวิเคราะห์ปัญหาและการออกแบบอัลกอริทึม
ปัญหาโจเซฟไม่ยาก แต่มีวิธีแก้ปัญหามากมาย มีหลายรูปแบบในคำถาม นี่คือวิธีการดำเนินการ
ในคำถามนั้นบุคคลเลนถูกล้อมรอบด้วยวงกลมซึ่งเป็นแรงบันดาลใจให้เราใช้โซ่วงกลมเพื่อเป็นตัวแทนของมัน เราสามารถใช้อาร์เรย์โครงสร้างเพื่อสร้างโซ่วงกลม มีสมาชิกสองคนในโครงสร้างหนึ่งคือโหนดหัวที่ชี้ไปที่ลูกคนแรกและอีกคนหนึ่งคืออุณหภูมิโหนดเป็นคำพิพากษา (รับผิดชอบในการเล่นบทบาทสนับสนุน)
รหัสเฉพาะมีดังนี้:
การสาธิตแพ็คเกจ 11;/** * ปัญหาของโจเซฟกลายเป็นผ้าเช็ดหน้า * * @author Tianq Idea: สร้างคลาสเด็ก, รายการวนรอบคลาส cycllink */การสาธิตคลาสสาธารณะ cycllink (); cyclink.setlen (15); cyclink.createlink (); cyclink.setk (2); cyclink.setm (2); cyclink.show (); cyclink.play ();}} // สร้างเด็ก เด็ก idthis.no = no;}} คลาส cycllink {// กำหนดการอ้างอิงถึงลูกคนแรกในรายการที่เชื่อมโยงลูกคนแรก // การอ้างอิงถึงเด็กคนแรกไม่สามารถย้ายเด็กคนแรก = null; temp เด็ก = null; int len = 0; // ระบุว่าเด็กจำนวนมาก {this.m = m;} // ตั้งค่าขนาดของรายการที่เชื่อมโยงกับโมฆะสาธารณะ setlen (int len) {this.len = len;} // ตั้งจำนวนคนที่จะนับโมฆะสาธารณะ setk (int k) {this.k = k;} // เริ่มเล่น void playpublic k; i ++) {temp = temp.nextchild;} ในขณะที่ (this.len! = 1) {// 2. นับ m สำหรับ (int j = 1; j <m; j ++) {temp = temp.nextchild; temp2.nextchild;} // 3. ออกจากเด็กที่นับเป็น m, ออกจาก temp2.nextchild = temp.nextchild; // ให้อุณหภูมิชี้ไปที่เด็กคนต่อไปที่นับอุณหภูมิ = temp.nextchild; // this.show (); this.len-;} // ระบบลูกสุดท้าย. out.println ("สุดท้ายออกจากวงกลม"+temp.no);} // เริ่มต้นรายการแหวนลิงค์สาธารณะ void createlink () {สำหรับ (int i = 1; i <= len; i ++) {ถ้า (i == 1) {// this.firstchild = ch; this.temp = ch;} else {ถ้า (i == len) {// สร้างลูกลูกคนแรก ch = เด็กใหม่ (i); temp.nextchild = ch; temp.nextchild = this.firstchild; ch;}}}} // พิมพ์รายการโมฆะที่เชื่อมโยงกับวงแหวนสาธารณะแสดง () {เด็กอุณหภูมิ = this.firstchild; ทำ {system.out.print (temp.no + ""); temp = temp.nextchild;} ในขณะที่ (temp! = this.firstchild);ผลลัพธ์:
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้เกี่ยวกับการวิเคราะห์ตัวอย่างของปัญหาโจเซฟในการเขียนโปรแกรม Java และฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน เพื่อนที่สนใจสามารถอ้างถึงหัวข้ออื่น ๆ ที่เกี่ยวข้องในเว็บไซต์นี้ต่อไป หากมีข้อบกพร่องใด ๆ โปรดฝากข้อความไว้เพื่อชี้ให้เห็น ขอบคุณเพื่อนที่ให้การสนับสนุนเว็บไซต์นี้!