上机编程题-约瑟夫问题(升级版)

java 实现数据链表,动态模拟约瑟夫问题求解package huawei;public final class Demo { /* 功能: 约瑟夫问题众所周知,原始的约瑟夫问题是这样的:有n个人,编号为1,2,..., n,站成一圈, 每次第m个将会被处决,直到只剩下一个人。约瑟夫通过给出m来决定赦免其中的一个人。 例如当n=6,m=5时,5,4,6,2,3将会被依次处
摘要由CSDN通过智能技术生成

java 实现数据链表,动态模拟约瑟夫问题求解

package huawei;


public final class Demo {
	
	/*
	功能: 约瑟夫问题众所周知,原始的约瑟夫问题是这样的:有n个人,编号为1,2,..., n,站成一圈,
	每次第m个将会被处决,直到只剩下一个人。约瑟夫通过给出m来决定赦免其中的一个人。
	例如当n=6,m=5时,5,4,6,2,3将会被依次处决,而1将会幸免。

	假如有k个好人,和k个坏人,所有人站成一圈,前k个人是好人,后k个人是坏人,
	编写程序计算一个最小的m,使k个坏人都被处决,而不处决任何好人。

	    
	输入: k 为正整数
	    
	输出: 
	     
	返回: 最小的m,使k个坏人都被处决,而不处决任何好人。
	     
	*/
	

	public static  int getMinimumM(int K)
	{
	    /*在这里实现功能*/
		int result = 1;

		while(true){
			boolean flag = true;
			for(int i = 0; i < K; i++){
				int n = 2*K - i;
				int temp_result = (result-1) % n;
			    int temp_i = i;
			    int temp_n = n;
				while(temp_i --> 0){
					temp_n++;
					temp_result = ( temp_result + result % temp_n ) % temp_n;
				}
				if(temp_result < K){
				
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值