关于约瑟夫问题,搞不懂思路,不会编程

问题描述

关于约瑟夫问题,搞不懂思路,不会编程

有10个人围成一个圈(编号0-9),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩一个人为止,问此人原来的位置是多少号?(编程实现)速求

解决方案

要用java编程,C我都没学过。。。

解决方案二:

  /**
  * Title: 编号1-10的人坐在一起围成一个圈 可以数数从1开始数  数3出列 下个人继续开始从1开始数
  * Description: 打印最后一名出列是几号
  * @author Mr Lv
  * @date 2011-11-12
  */
 import java.util.List;
 import java.util.ArrayList;
 public class lzwCode{

    public static void main(String [] args) {
        List<Integer> list = new ArrayList<Integer>();
        for (int i=1; i<=10; i++) {
            list.add(i);
        }
        int m = 0;
        while(list.size() > 1) {
            for (int j=0; j<list.size(); j++) {
                m++;
                if (m%3 == 0) {
                    System.out.println(list.remove(j));
                    j--;
                    m = 0;
                }
            }
        }
        System.out.println("最后一个人的号码是: " + list.get(0));
    }
 }

解决方案三:

http://blog.csdn.net/newnewman80/article/details/5989449

解决方案四:

最后的结果是此人原来的编号为3。

public class JosephDemo {

    private LinkedList<Integer> perList;
    private int start;
    private int scale;
    private int end;

    /**
     * @param num
     *            总人数,每个人的编号是从0开始的
     * @param start
     *            起始报数
     * @param scale
     *            报数为scale的整数倍时淘汰一个人,比如scale为3,则报数为3、6...的人会淘汰
     * @param end
     *            结束时剩余的人数
     */
    public JosephDemo(int num, int start, int scale, int end) {
        perList = new LinkedList<Integer>();
        for (int i = 0; i < num; i++) {
            perList.add(i);
        }
        this.start = start;
        this.scale = scale;
        this.end = end;
    }

    public static void main(String[] args) {
        int num = 10;
        int start = 1;
        int scale = 3;
        int end = 1;
        JosephDemo yd = new JosephDemo(num, start, scale, end);
        Integer[] index = yd.findEnd();
        System.out.println("剩下的编号为:");
        for (int i = 0; i < index.length; i++) {
            System.out.println(index[i]);
        }
    }

    /**
     * 找到剩下一个人时的起始编号
     *
     * @return
     */
    private Integer[] findEnd() {
        int lastNum = perList.size();
        int _start = this.start;
        while (lastNum != this.end) {
            Integer head = perList.pop();
            if (_start % scale == 0) {
                lastNum--;
                System.out.println("数字为" + _start + "时,移除编号为" + head);
            } else {
                perList.addLast(head);
            }
            _start++;
        }
        Integer[] result = perList.toArray(new Integer[0]);
        return result;
    }
}

解决方案五:

(百例编程)71.约瑟夫问题

时间: 2024-12-20 16:35:32

关于约瑟夫问题,搞不懂思路,不会编程的相关文章

foreach循环遍历数组搞不懂执行顺序思路

问题描述 foreach循环遍历数组搞不懂执行顺序思路 搞不懂if判断那一块 最好有大神能给详细说明一下执行顺序 解决方案 这也没那么复杂http://blog.csdn.net/china_skag/article/details/6444727

javascript-數組的push函數,搞不懂

问题描述 數組的push函數,搞不懂 var a = [123];var b = [456];Array.prototype.push.apply(a b);console.log(a); //[123456] var a = [123];var b = [456];a.push(b);console.log(a); 這兩個有何不同?我覺得應該得出相同的結果才對啊為什麼會不同呢? 解决方案 a.push(b);是把b这个数组对象放到a里面 push.apply(a b);//是因为apply的第

孙鑫-Visual C++的一段代码搞不懂求解释

问题描述 Visual C++的一段代码搞不懂求解释 说一下自己的理解.题目是孙鑫老是的文本输出的例子. 1:GetBkColor得到背景白色,然后SetTextColor(白色)把背景白色设置为文字颜色.跟着clr应该是赋值得到白色了吧,但是F5看的时候是黑色,就要原文字颜色.我这么理解应该错了 1 COLORREF clr=dc.SetTextColor(dc.GetBkColor()); //GetBkColor属于dc对象,改变dc中的背景值(白色).然后SetTextColor用白色值

c语言-strcpy和strcat的使用问题,搞不懂为什么出现这样的错误?怎么改呢》?

问题描述 strcpy和strcat的使用问题,搞不懂为什么出现这样的错误?怎么改呢>? int _tmain(int argc, _TCHAR* argv[]) { char n; CString strTime; // 用于将CTime对象格式化为字符串 CTime curTime = CTime::GetCurrentTime(); cout<<GetExePath()<<endl; /*cout<<"请输入要删除几天前的文件夹:"; c

js-javascript一个让人搞不懂的计算问题 求大婶指点

问题描述 javascript一个让人搞不懂的计算问题 求大婶指点 alert(200.5*3);===>弹出:601.5//没问题 alert(200.56*3);===> 弹出这个货色出来: 求指点怎么算出来的呢?http://xiangxitujiazumiaozuzizhizhou.foxdb.cc/sitemap.html 解决方案 这是js浮点运算的一个bug,我找了下你可以看下这篇blog,里面讲的还详细了.http://blog.csdn.net/cdsnaspnet/arti

visualc++-SelectObject搞不懂。

问题描述 SelectObject搞不懂. 孙鑫老师书籍中的代码 //我的理解是这样的. //下面是定义了pen对象,把画笔定义成红色实线. CPen pen(PS_SOLID,1,RGB(255,125,0)); CClientDC dc(this); //用SelectObject把pen的值(第一句已经定义为红色)放入设备描述表的应该红色,存入pOldPen也应该红色. //为什么都说是吧黑色给了pOldPen呢? CPen* pOldPen=dc.SelectObject(&pen);

搞不懂-求解释啊~~~ 又不明白了。。

问题描述 求解释啊~~~ 又不明白了.. #include #include main() { int abc; c=0; for(a=100;a<=200;a++) { for(b=2;b<=a-1;b++) if(a%b==0) break; if(a==b) printf(""素数为:%dn""a); c++; } system(""pause""); } break的意思不是跳出循环进行下一步吗? 这样的话

android studio-android 查询数据库,遇到一个搞不懂的问题,请看截图

问题描述 android 查询数据库,遇到一个搞不懂的问题,请看截图 我需要查询数据库,可是加了一个条件之后,另外一个条件就没效果了.难道只能选其一吗?不可能吧!求大神,急急急急急急!QQ945655649 解决方案 给每个条件加上括号看看.你说的无效是什么意思,查询的结果包含status不等于1的结果?

c语言-求帮助写一个代码 刚学习数据结构 实在是搞不懂 求大神帮忙谢谢

问题描述 求帮助写一个代码 刚学习数据结构 实在是搞不懂 求大神帮忙谢谢 好心人帮忙翻译好了 求大神帮忙写一下代码 谢谢大家了 解决方案 你的需求,要至少4000C币,你给的100太少了 解决方案二: http://blog.csdn.net/qq_31766907/article/details/50331951这个链接,你看看,或许能帮到你.