1. 소개
조셉 문제 (때로는 요셉 순열이라고도 불리는 것은 컴퓨터 과학 및 수학에 나타나는 문제입니다. 컴퓨터 프로그래밍 알고리즘에서도 비슷한 문제가 조셉 링이라고도합니다. "손수건 던지기 문제"라고도합니다.)
예:
Len은 개인적으로 원을 구성하고 손수건을 던지는 게임을 연주했습니다. M을 계산하는 Kth 사람에서 시작하여 M이 계산되면 M을 계산하는 사람은 원에 남은 사람이 한 명 밖에 없을 때까지 원을 빠져 나갑니다.
문제 분석 및 알고리즘 설계
조셉 문제는 어렵지 않지만 많은 해결책이 있습니다. 질문에는 많은 변형이 있습니다. 구현 방법은 다음과 같습니다.
이 문제에서 Len 개인은 원으로 둘러싸여있어 원형 체인을 사용하여 그것을 나타내는 영감을줍니다. 구조 배열을 사용하여 원형 체인을 형성 할 수 있습니다. 구조에는 두 명의 구성원이 있으며, 하나는 첫 번째 자식을 가리키는 헤드 노드이고, 다른 하나는 판단 (지원 역할을 담당하는 책임)으로서 노드 온도입니다.
특정 코드는 다음과 같습니다.
패키지 demo11;/** * Joseph의 문제, 손수건으로 바뀌 었습니다 * @author tianq 아이디어 : 하위 클래스, 루프 목록 클래스 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 ();}} // 어린이 클래스 아동 생성 {// 아동의 신분은 int nextchild; idthis.no = no;}} class cycllink {// 링크 된 목록에서 첫 번째 자녀에 대한 참조를 정의합니다. 첫 번째 자녀의 첫 번째 자녀 // 첫 번째 자녀에 대한 참조는 자녀를 옮길 수 없습니다. Child firstchild = null; child temp = null; int len = 0; // int k = 0; // count het the out // mpublic void setms {this.m = m;} // 링크 된 목록의 크기를 공개 void setlen (int len) {this.len = len;} // public void setk (int k) {this.k = k;}를 계산하도록 사람들의 수를 설정합니다. k; i ++) {temp = temp.nextChild;} while (this.len! = 1) {// 2. count m for (int j = 1; j <m; j ++) {emp = temp.nextChild;} // 원치 아동을 찾으십시오. temp2.nextChild;} // 3. m으로 계산하는 어린이를 종료하고, temp2.nextChild = temp.nextChild; // 템프를 계산하는 다음 아이를 가리 키게하십시오. this.len-;} // 마지막 자식 시스템 .out.println ( "마지막으로 서클의 마지막"+temp.no);} // 링-링크 목록 초기화 public void createlink () {for (int i = 1; i <= len; i ++) {if (i == 1) {// 첫 번째 자식 ch = new Child (i); this.firstChild = ch; this.temp = ch;} else {if (i == len) {// 첫 번째 자녀를 만듭니다 ch = new Child (i); temp.nextchild = ch; temp.nextchild = this.firstchild;} else {// child ch = new Child (i); temp. ch;}}}} // 반지 연결 목록 인쇄 public void show () {child temp = this.firstchild; do {system.out.print (temp.no + ""); temp = temp.nextchild;} while (temp! = this.firstchild);}}결과:
요약
위는 Java 프로그래밍에서 Joseph 문제의 예제 분석에 대한이 기사의 모든 내용이며, 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!