| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1444 人关注过本帖
标题:帮忙做一个关于无序列表的问题
只看楼主 加入收藏
一梦钧天
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-5-13
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:10 
帮忙做一个关于无序列表的问题
一个旅游团被海盗抓住了。海盗决定在收到赎金前,每过半个小时杀一个人质。将所有的人质排成一个圈,每隔三个人质杀一个人质。请问,如果你在这个旅游团中,如何才能保证自己坚持到最后。
帮忙写出具体的代码,十分感谢了!!!!!!!!!!!
搜索更多相关主题的帖子: 序列 
2010-05-13 21:46
一梦钧天
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2010-5-13
收藏
得分:0 
还有两个:1.酒吧里,一桌人(≥10)围在一起行酒令。酒令如下:先按照顺时针方向从1开始依此数数。若是数到7的倍数或者含有7这个数,则调转方向接着数。依此类推。请模拟此过程。    2.建立一个无序列表,并将其倒置。
2010-05-13 21:58
观星
Rank: 2
等 级:论坛游民
帖 子:77
专家分:45
注 册:2008-5-1
收藏
得分:0 
先回复你的海盗团的问题
程序代码:
import java.util.*;
public class testhaidao
{
    public static void main(String args[])
    {
        System.out.println("请输入旅游团的人数");
        int num,i,k=0;
        Scanner keyBoard = new Scanner(System.in);
        num=keyBoard.nextInt();
        boolean lvyoutuan[]=new boolean[num];
        for(i=0;i<num;i++)
        lvyoutuan[i]=true;
        for(i=1;i<num;i++)
        {
            System.out.println("第"+(k+1)+"个人被杀死了");
            lvyoutuan[k]=false;
            do
            {
                k++;
                k=k%num;
            }while(!lvyoutuan[k]);
            do
            {
                k++;
                k=k%num;
            }while(!lvyoutuan[k]);
            do
            {
                k++;
                k=k%num;
            }while(!lvyoutuan[k]);
            do
            {
                k++;
                k=k%num;
            }while(!lvyoutuan[k]);           
        }
        System.out.println("坚持到最后的是旅游团的第"+(k+1)+"个人");
    }
}

 
2010-05-14 09:17
wtuaimmmm
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-14 10:28
观星
Rank: 2
等 级:论坛游民
帖 子:77
专家分:45
注 册:2008-5-1
收藏
得分:0 
回复 4楼 wtuaimmmm
楼上的代码自己测试过么?虽然是帮人,给的代码还是全点比较好,

还有你的算法,没有考虑到最后剩下不到3个人的时候怎么办,

我给你加了一条测试语句,把人数改成三个,你看下你的结果
程序代码:
import java.util.*;
public class testhaidao
{
static int m = 0;//定义下朋友的号码
    public static void main(String args[]) {
        ArrayList<Integer> a = new ArrayList<Integer>();
        for (int i = 1; i <= 10; i++) {//10为你要输入的旅游的人数,
            a.add(i);
        }
        while (a.size() >1) {
            for (int i = 0; i < a.size(); i++) {
                m++;
                if (m % 3 == 0) {//当为3的时候就删除
                    m = 0;//删除的这个小朋友看作是0
                    a.remove(i);//执行删除
    System.out.println((i+1)+"死了");
                    i--;//删除一个之后将这个小朋友的号码去掉
                }
            }
        }
        System.out.println("你应该站在旅游团的: " + a.get(0)+"位");
    }
}

运行结果是:
3死了
5死了
7死了
2死了
4死了
1死了
3死了
2死了
2死了

你应该站在旅游团的: 4位

2010-05-14 14:32
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:5 
酒吧行酒令代码,不知道是否符合楼主的要求
程序代码:
import java.util.ArrayList;
import java.util.Scanner;

public class B_H_J {
    private ArrayList<Person> persons = new ArrayList<Person>();

    public B_H_J() {

    }

    private void init(int n) {
        persons.clear();
        for (int i = 1; i <= n; i++) {
            persons.add(new Person(i));
        }
    }

    private boolean has7(int num) {
        while (num > 0) {
            if (num % 10 == 7)
                return true;
            else
                num = num / 10;
        }
        return false;
    }

    public void execute(int n) {
        try {
            if (n < 10)
                throw new Exception();
        } catch (Exception e) {
            e.printStackTrace();
        }
        init(n);
        boolean direct = true;// 正序为true,反序为false;
        int i = 1;
        int current = 0;
        while (persons.size() > 1) {
            current = (current + persons.size()) % persons.size();//将current转换为合法的索引值
            System.out.println("person " + persons.get(current).getId() + "数数,数为:" + i);
            if (i % 7 == 0 || has7(i)) {
                System.out.println("person " + persons.get(current).getId() + "行酒令,并退出圈子");
                persons.remove(current);
                direct = !direct;
                if (!direct)
                    current -= 1;
            } else {
                if (direct)
                    current += 1;
                else
                    current -= 1;
            }
            i++;
        }
    }

    public static void main(String args[]) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        B_H_J test = new B_H_J();
        test.execute(n);
    }
}

class Person {
    private int id;

    public Person(int id) {
        this.id = id;
    }

    public int getId() {
        return this.id;
    }
}
2010-05-14 17:20
wtuaimmmm
该用户已被删除
收藏
得分:5 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-17 09:32
wtuaimmmm
该用户已被删除
收藏
得分:6 
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-17 10:13
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:4 
            if(i%10==7||i%7==0){
                System.out.println("行酒令,"+list.get(cree));
                current=!current;
                cree-=2;
            }
楼上,你的这句代码逻辑错误。i%10==7只能判断个位数,还有10位数、百位数等等。
而且你用一个死循环,当数数超过int最大值时,就会抛出异常。
2010-05-17 13:01
wtuaimmmm
该用户已被删除
收藏
得分:0 
回复 8楼 wtuaimmmm
提示: 作者被禁止或删除 内容自动屏蔽
2010-05-17 16:43
快速回复:帮忙做一个关于无序列表的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030454 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved