java 约瑟夫环

题目: 有n 个人围城一圈每次从1数起数到3就把那个人提出圈子,继续从下个人开始报数,最后只保留一个人。
package com.duapp.itfanr;

import java.util.ArrayList;
import java.util.List;

public class CharDemo {
	public static void main(String args[]) {

		String str = "9718532";

		strout(str, 3);
	}

	static void strout(String str, int num) {

		List<String> list = new ArrayList<String>();

		for (int i = 0; i < str.length(); i++) {

			list.add(String.valueOf(str.charAt(i)));
		}
		// 以下为关键代码
		int circleCount = 0;
		while (list.size() > 1) {
			for (int i = 0; i < list.size(); i++) {
				circleCount++;
				if (circleCount == 3) {
					System.out.println(list.get(i));
					list.remove(i);
					circleCount = 0;
					i--; // 这很重要,因为你remove掉了一个,所有后面的数据的都向前移了以为相应的index 也减了1。
					// System.out.println(list);
				}
			}
		}
		System.out.println(list.get(0));

	}

}
或者称为猴子选大王问题: m只猴子围坐成一个圈,按顺时针方向从1到m编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到n的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。设计并编写程序,实现如下功能: (1)要求由用户输入开始时的猴子数m、报数的最后一个数n。 (2)给出当选猴王的初始编号。
#!/usr/bin/python
# coding=utf-8
# 约瑟夫环算法 之 猴子选王 问题

def king(m,n):
    dd = {}
#生成一个字典
    p = 1
    while(p<=m):
        dd[p] = p
        p = p+1

    j = 1
    while(len(dd) >1):
        for k,v in dd.items():
            if(j == n):
                del dd[k]
                j = 1
            else:
                j = j+1
    return dd

print king(6,2)
留着以后看吧。我都没看懂。。。 参考: [1]. http://blog.youkuaiyun.com/clam_clam/article/details/6786918 [2]. http://www.pythontab.com/html/2013/pythonhexinbiancheng_0625/461.html  

转载于:https://my.oschina.net/itfanr/blog/195690

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值