⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 executionexperiment.java

📁 java写的约瑟夫问题
💻 JAVA
字号:
import java.io.*;

interface Execute {
	void initData(int totalNumber, int initPos, long initStep); // 数据初始化

	void execute(); // 模拟执行处死犯人

	int getSurvival(); // 返回生存下来的犯人的序号
}

class Execution implements Execute {
	int[] data; // 存放现有犯人的序号
	int currNumber; // 存放现有犯人的总数
	int currPos; // 存放下一次要被处死的犯人在数组中的位置
	long currStep; // 存放下一次寻找犯人的步长

	public void initData(int totalNumber, int initPos, long initStep) {
		currNumber = totalNumber;
		currPos = initPos;
		currStep = initStep;
		data = new int[totalNumber];
		for (int i = 0; i < totalNumber; i++)
			data[i] = i;
	}

	public int getSurvival() {
		return data[0];
	}

	public void execute() {
		while (data.length > 1) {
			currStep += data[currPos];

			for (int i = currPos; i < data.length - 1; i++) {
				data[i] = data[i + 1];
			}
			int[] temp = new int[data.length - 1];
			System.arraycopy(data, 0, temp, 0, data.length - 1);
			data = temp;

			currNumber--;
			
			if (currPos == data.length) {
				currPos = 0;
			}
			
			for (long i = 2; i <= currStep; i++) {
				if (currPos == data.length - 1) {
					currPos = 0;
				} else {
					currPos++;
				}
			}
		}
	}

}

public class ExecutionExperiment {
	public static void experiment(Execute exec) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = "";
		System.out.println("请输入:犯人总数  起始犯人号  初始步长");
		try {
			line = br.readLine();// 读取一行数据
		} catch (IOException ioe) {
		}
		if (line.equals("finish")) // 如果用户的一行输入是“finish”,则程序全部退出。
			System.exit(0);
		String[] numbers = line.split(" ");
		// 把输入的一行数据解析出三个参数:犯人总数、初始犯人号、初始步长
		int total = Integer.parseInt(numbers[0]);
		int begin = Integer.parseInt(numbers[1]);
		long step = Long.parseLong(numbers[2]);
		exec.initData(total, begin, step);
		exec.execute();
		int survival = exec.getSurvival();
		System.out.println("逃生的犯人是:" + survival + "号");
		System.out.println();
	}

	public static void main(String[] args) {
		while (true) {
			Execution execution = new Execution();
			experiment(execution); // 对象上转型和接口回调
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -