正文
约瑟夫环代码java 约瑟夫环代码c语言实现
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
java循环单链表实现约瑟夫环
看约瑟夫环代码java了你约瑟夫环代码java的代码,不是很明白,给你提几个建议吧约瑟夫环代码java:
1、不需要tail节点
2、remove方法应该对删除节点前面约瑟夫环代码java的节点操作,而不是使用数字找
给你我修改约瑟夫环代码java的LinkList类,你参考一下:
public class LinkList {
private Node head;
int curlen = 0;
// 创建链表
public void createlist(int code) throws Exception {
insert(curlen, code);
}
public void insert(int i, int code) throws Exception {
Node s = new Node(code);
if (i == 0) {
s.setNext(head);
head = s;
}
Node p = head;
int j = 0;
while (p != null j i - 1) {
p = p.getNext();
j++;
}
if (j i || p == null) {
throw new Exception("插入位置不合理");
}
s.setNext(p.getNext());
p.setNext(s);
// tail = s;
// tail.setNext(head);
curlen = curlen + 1;
}
public void remove(int i) throws Exception {
Node p = head, q = null;
int j = 0;
i = i - 1;
while (j i) {
q = p;
p = p.getNext();
j++;
}
if (j i || p == null)
throw new Exception("删除位置不合法");
if (q == null) {
// tail.setNext(p.getNext());
head = head.getNext();
} else
q.setNext(p.getNext());
curlen = curlen - 1;
}
/**
* 按照节点删除
* @param i
* @throws Exception
*/
public void remove(Node p) throws Exception {
if(p.getNext()==p){
p=null;
head=null;
}
else{
Node q = p.getNext();
p.setNext(q.getNext());
}
curlen = curlen - 1;
}
public void out(int m) throws Exception {
Node p = head;
if(m==1){
System.out.print("按照顺序出列");
return;
}
int count = 1;
int n=m-1;
while (curlen 0) {
if (count == n) {
System.out.print(p.getNext().getData() + " ");
remove(p);
count = 1;
} else {
count++;
}
p = p.getNext();
}
}
public void display() {
Node node = head;
for (int i = 0; i 2 * curlen; i++) {
System.out.print(node.getData() + " ");
node = node.getNext();
}
System.out.println();
}
}
java 约瑟夫环 循环
import java.util.*;
public class Sefu {
public static void main(String[] args) {
int N;// 总人数
int M;// 从第M个人开始
int S;// 隔S个人出局
Scanner reader = new Scanner(System.in);
System.out.print("请输入N:");
N = reader.nextInt();
System.out.print("请输入M:");
M = reader.nextInt();
System.out.print("请输入S:");
S = reader.nextInt();
int[] a = new int[N];
for (int h = 1; h = N; h++) {
a[h - 1] = h;
System.out.print(a[h - 1] + " ");
}
System.out.println();
int count;
M = M - 1;// 转成下标
for (int j = 1; j = N; j++) {
count = 1;// 从1开始报数
while (count != S) {// 如果没有报到S就继续报数
if (a[M] != 0) {// 如果没出局就报数
count++;//报数
for (int i = 1; i N; i++) {
//然后找下一个(从+1开始找)要报数的人
if (M + i N) {
//如果M+i没到最后一位
if (a[M + i] != 0) {
//判断是否出局
M = M + i;
//没出局就是从这个人开始了
break;
//不要找了
}else{
continue;
//出局了就i++,看下一个人有没有出局
}
}else{
if (a[M + i-N] != 0) {
//如果M+i过了最后一位,就-N,相当于转了一个圈回到前面
M = M + i-N;
//没出局就从M+i-N开始报数
break;
}else{
continue;
}
}
}
} else {// 如果出局了就跳过找下一个要报数的人
if (M + 1 N) {
M++;
} else {
M = 0;
// 如果M+1==N就从下标0开始找数组的值不是0的数
continue;
}
continue;// 如果是0就继续
}
}
// 如果报数报到S
System.out.print(a[M] + " ");// 出局
int out=M;//下标为out的出局了
for (int i = 0; i N; i++) {//找下一个要报数的人
if (M + i N) {//如果M+i没到最后一位
if (a[M + i] != 0) {//判断是否出局
M = M + i;
break;
}else{
continue;//出局了就i++从下一个开始
}
}else{
if (a[M + i-N] != 0) {
//如果M+i过了最后一位,就-N,相当于转了一个圈回到前面
M = M + i-N;
break;
}else{
continue;
}
}
}
a[out]=0;//出局的设为0
}
}
}
//写完发现我定义的S和M和你定义的是反过来的,不是最好的算法。
//可以把找下一个人的方法抽出来,写成一个方法
//输入一个数组a,找第M个人的下一个人,输出下一个人的下标。
import java.util.*;
public class Sefu {
public static void main(String[] args) {
int N;// 总人数
int M;// 从第M个人开始
int S;// 隔S个人出局
Scanner reader = new Scanner(System.in);
System.out.print("请输入N:");
N = reader.nextInt();
System.out.print("请输入M:");
M = reader.nextInt();
System.out.print("请输入S:");
S = reader.nextInt();
int[] a = new int[N];
for (int h = 1; h = N; h++) {
a[h - 1] = h;
System.out.print(a[h - 1] + " ");
}
System.out.println();
int count;
M = M - 1;// 转成下标
for (int j = 1; j = N; j++) {
count = 1;// 从1开始报数
while (count != S) {
// 如果没有报到S就继续报数
count++;// 报数
M=getNext(a, M);
//找下一个没出局(不为0)的数
}
// 如果报数报到S
System.out.print(a[M] + " ");// 出局
a[M]=0;
M=getNext(a, M);//找下一个没出局的数
}
}
/**
* 得到下一个数的下标
* @param a
* @param M
* @return
*/
public static int getNext(int[] a, int M) {
for (int i = 1; i a.length; i++) {
if (M + i a.length) {
if (a[M + i] == 0) {
//如果下一个数的值为0就继续找
continue;
} else {
M=M+i;
return M;
//如果下一个数的值不为0就是这个数。
}
}else{
if (a[M + i-a.length] == 0) {
//如果下一个数的值为0就继续找
continue;
} else {
M=M+i-a.length;
return M;
//如果下一个数的值不为0就是这个数。
}
}
}
return -1;
}
}
//一不小心又帮你改好了~
急求用java解决约瑟夫环的编程(接图片“显示“出环者”次序并给出最终的赦免者”)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class demo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入总人数:");
int totalNum = scanner.nextInt();
System.out.print("请输入报数的大小:");
int cycleNum = scanner.nextInt();
System.out.print("请输入第几个报数:");
int cur = scanner.nextInt();
yuesefu(totalNum, cycleNum ,cur);
scanner.close();
}
public static void yuesefu(int totalNum, int countNum,int cur) {
// 初始化人数
ListInteger start = new ArrayListInteger();
for (int i = 1; i = totalNum; i++) {
start.add(i);
}
//从第K个开始计数
int k = cur-1;
while (start.size() 0) {
k = k + countNum;
//第m人的索引位置
k = k % (start.size()) - 1;
// 判断是否到队尾
if (k 0) {
System.out.println(start.get(start.size()-1));
start.remove(start.size() - 1);
k = 0;
} else {
System.out.println(start.get(k));
start.remove(k);
}
}
}
}
约瑟夫环java实现报错,菜鸟求解
问题原型:
传说在很久很久以前,有一架搭载着n个人的飞机出现了故障,迫降在了一个荒岛上。飞机彻底报废后,这些人用飞机的残骸建成了一艘只能容纳一个人乘坐的小船,那么怎么去确定这n个人中哪个人有资格上船呢?于是,这n个人采用了下面的方式来解决这个困境。
问题描述:
假设有N个人围成一圈,每个人都有从1到N的唯一顺序编号。接下来从编号为1的人开始顺序报数。报到M号的人退出这个圈。然后由下一个人重新由1开始进行报数,如此循环往复,那么最终留下来的是编号为多少的那个人呢?
java编程代码实现:
import java.util.Scanner;
public class countMethod {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//接收用户输入,获得总人数N
System.out.println("请输入参与的总人数:");
int N=sc.nextInt();
//接收用户输入,获得出列人员的编号M
System.out.println("请输入出列的人的编号:");
int M=sc.nextInt();
//建立布尔型的数组,长度为总人数
Boolean rs[]=new Boolean[N];
//初始化布尔型数组,初始值均为true
for(int i=0;iN;i++){
rs[i]=true;
//System.out.println(rs[i]);
}
int n=N;//剩余的人数
int m=0;//报数的编号
while(n1){
for(int j=0;jN;j++){
if(rs[j]){
m++;
if(m==M){
m=0;
rs[j]=false;
n--;
//System.out.println(rs[j]);
}
}
}
}
//打印出最后留下来的人员的编号
for(int k=0;kN;k++){
if(rs[k]){
System.out.println("最后留下的是第"+(k+1)+"号。");
break;
}
}
}
}
急!急!急!Java怎么用递归实现约瑟夫环?求试验成功的、初级的代码
public class TestJosephus {
public static void main(String[] args) {
//留几个人
int alive = 2;
//总人数
int total = 41;
//自杀者报数
int killMan = 3;
Josephus(alive, total, killMan);
}
/**
* @param alive 存活的人初始位置序号//留几个人
* @param total 总人数
* @param killMan 自杀者报数
*/
public static void Josephus(int alive, int total, int killMan) {
int []man = new int[total];
int count = 1;
int i = 0;
int pos = -1;
while (count = total) {
do {
pos = (pos+1)%total;
if (man[pos] == 0) {
i++;
}
if (i == killMan) {
i = 0;
break;
}
} while (true);
man[pos] = count;
System.out.print("第 " + (pos+1) + " 个人自杀约瑟夫环代码java!约瑟夫环编号为约瑟夫环代码java:" + man[pos]);
if (count % 2 != 0) {
System.out.print(" - ");
}else {
System.out.println(" -= ");
}
count++;
}
System.out.println();
System.out.println("这 " + alive +" 个需要存活的人初始位置应排在以下序号约瑟夫环代码java:");
alive = total - alive;
for (i = 0; i total; i++) {
if (man[i] alive) {
System.out.println("初始编号:" + (i+1) + ",约瑟夫环编号:" + man[i]);
}
}
System.out.println();
}
}
怎么用java数组实现约瑟夫环
用java数组实现约瑟夫环
package Josephround;
public class Joseround {
int sit;
int flagjo=0;
Joseround(){};
Joseround(int x){
sit=x;
}
void setflag(int x){
flagjo=x;
}
}
package Josephround;
public class Inijose {
Joseround jo[];
static int length=0;
Inijose(){};
Inijose(int x){
jo=new Joseround[x];
for(int i=0;ix;i++){
jo[i]=new Joseround(i+1);//创建对象数组
length++;
}
}
void delete(int n){
for(int i=n;ilength-1;i++){
jo[i]=jo[i+1];
}
length--;
}
}
package Josephround;
import java.util.Scanner;
public class Text {
public static void main(String[] args) {
int m,n;
System.out.println("input m");
Scanner m1=new Scanner(System.in);
m=m1.nextInt();
System.out.println("input n");
Scanner n1=new Scanner(System.in);
n=n1.nextInt();
int temp=0;
int x=0;
Inijose joseph=new Inijose(n);
while(joseph.length!=0){
for(int i=1;i=m;i++){
joseph.jo[x].setflag(i);
if(joseph.jo[x].flagjo==m){
System.out.println(joseph.jo[x].sit);
joseph.delete(x);
x--;
}
if(xjoseph.length-1) x++;
else x=0;
}
}
}
}
约瑟夫环代码java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于约瑟夫环代码c语言实现、约瑟夫环代码java的信息别忘了在本站进行查找喔。