1. Pendahuluan
Masalah Joseph (kadang -kadang disebut permutasi Josephs, adalah masalah yang muncul dalam ilmu komputer dan matematika. Dalam algoritma pemrograman komputer, masalah serupa juga disebut cincin Joseph. Juga dikenal sebagai "masalah lemparan saputangan".)
contoh:
Len secara pribadi membentuk lingkaran dan memainkan permainan melempar saputangan. Mulai dari orang K, menghitung dari 1. Ketika M dihitung, orang yang menghitung M akan keluar dari lingkaran, sampai hanya ada satu orang yang tersisa di lingkaran.
Analisis Masalah dan Desain Algoritma
Masalah Joseph tidak sulit, tetapi ada banyak solusi; Ada banyak variasi dalam pertanyaan. Berikut adalah metode implementasi.
Dalam pertanyaan itu, individu Len dikelilingi oleh lingkaran, yang menginspirasi kita untuk menggunakan rantai melingkar untuk mewakilinya. Kita dapat menggunakan array struktural untuk membentuk rantai melingkar. Ada dua anggota dalam struktur, satu adalah simpul kepala yang menunjuk ke anak pertama, dan yang lainnya adalah suhu simpul sebagai penilaian (bertanggung jawab untuk memainkan peran pendukung).
Kode spesifiknya adalah sebagai berikut:
Paket Demo11;/** * Masalah Joseph, berubah menjadi sapu tangan * * @author tianq Ide: Buat kelas anak, kelas daftar loop Cycllink */kelas publik demo11 {public static void main (string [] args) {cycllink cyclink = new static static public (string [] args) {cycllink cyclink = new static static public (string [] args) {cycllink cyclink = Cycllink (); cyclink.setlen (15); cyclink.createlink (); cyclink.setk (2); cyclink.setm (2); cyclink.show (); cyclink.play ();}} // create child class {// Identitas anak berikutnya adalah anak; idthis.no = no;}}class CyclLink {// Define a reference to the first child in the linked list first child // The reference to the first child cannot be moved Child firstChild = null;Child temp = null;int len = 0;// Indicate how many children there are int k = 0;// The beginning child int m = 0;// count to the number of out// Set mpublic void setM(int m) {this.m = m;} // Tetapkan ukuran daftar ditautkan public void setlen (int len) {this.len = len;} // Tetapkan jumlah orang untuk menghitung public void setk (int k) {this.k = k;} // mulai playpublic void play () {anak temp = this. k; temp2.nextchild;} // 3. Keluar dari anak yang menghitung ke m, keluar dari temp2.nextchild = temp.nextchild; // biarkan suhu menunjuk ke anak berikutnya yang menghitung temp = temp.nextchild; // this.show (); this.len-;} // The Last Child System.out.println ("Last Out of the Circle"+Temp.no);} // Inisialisasi daftar cincin-link public void createLink () {for (int i = 1; i <= len; i ++) {if (i == 1) {// Ciptakan anak pertama Chob = i ++) {if (i == 1) {// Buat anak pertama; this.firstChild = ch; this.temp = ch;} else {if (i == len) {// Buat anak pertama anak ch = anak baru (i); temp.nextchild = ch; temp.nextchild = this.firstChild;} else {// terus membuat anak baru child = new child (i); ch;}}}} // cetak daftar public void public ring () {child temp = this.firstchild; do {system.out.print (temp.no + ""); temp = temp.nextchild;} while (temp! = this.firstchild);}}hasil:
Meringkaskan
Di atas adalah semua isi artikel ini tentang contoh analisis masalah Joseph dalam pemrograman Java, dan saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!