黑马程序员技术交流社区

标题: 算法实现问题 [打印本页]

作者: 李晓璐    时间: 2011-8-5 17:01
标题: 算法实现问题
20个元素   从头开始数  每数到第13个   提取出来输出并删除  然后继续  数到第20个之后从头开始    如此循环  直到20个元素全部输出    这个问题怎么实现
作者: 匿名    时间: 2011-8-5 18:11
递归,写个方法,弄个计数器,不好写。最好用面向对象思维,二十个小朋友手拉手,每个小朋友左右各拉着一个小朋友。有增删的方法
作者: 匿名    时间: 2011-8-5 20:07
这个问题我曾经也烦恼过,虎哥帮我解答了你可去看看他的解法,不过后来学到集合后我用集合写了算法代码希望对你有帮助[code=java]package com.sort;

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

public class Josephus {

        /**
         * 功能Josephus问题解答
         *
         * @param total总数
         * @param gap间隔数
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ArrayList<Integer> list = new ArrayList<Integer>();
                int total = 20;
                int gap = 13;
                // 编号
                for (int i = 1; i < 21; i++) {
                        list.add(i);
                }
                fun(list, gap);
        }

        public static void fun(List<Integer> list, int gap) {
                int index = 0;// 计算器用于记住数了多少个
                while (list.size() > 1) {
                        for (int i = 0; i < list.size(); i++) {
                                index++;
                                // 当数到gap时该元素被移除
                                if (index == gap) {
                                        System.out.println("第" + list.get(i) + "个被移除");
                                        list.remove(i);
                                        // 因为第i个被删除 掉了所以第i+1个上来顶了他的位置即变成了第i个,
                                        // 此时相当于已经数了一个所以index=1
                                        index = 1;
                                }
                        }
                }
                System.out.println("最后剩下" + list.get(0));
        }

}[/code]结果[code=java]第13个被移除
第6个被移除
第20个被移除
第14个被移除
第9个被移除
第5个被移除
第3个被移除
第2个被移除
第4个被移除
第8个被移除
第12个被移除
第18个被移除
第11个被移除
第7个被移除
第10个被移除
第17个被移除
第19个被移除
第16个被移除
第15个被移除
最后剩下1[/code]




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2