生活中常玩的游戏:
N个人玩游戏,说数字!,规定的数字为num,当要说到num数字或num倍数的人被淘汰,后面的人接着继续,直到剩下最后一个人为止,最后一个人获得胜利!
例如:有五个人玩游戏,五个人分别为 A,B,C,D,E. 
 String [ ] name={" A","B","C","D","E"};
  当规定的num为3时,  num=3;
  A--1;B--2;C--3(被淘汰);D--4;E--5;    ------->还剩下 ABDE 4人————》接着继续 
 
 A--6;B--7;D--8;E--9(被淘汰)---------->还剩下 ABD 3人-------》接着继续 A--10;B--11;D--12(被淘汰)---------》还剩下AB2人------》接着继续
 
A--13;B--14;A----15(被淘汰)-----------》最后剩下B------->最后B获得了胜利!!!想了好久,我当初的判断条件很简单                         while(true){
                                                              int count=5;//数组长度
                                                              i++;
                                                              if(i%num==0){
                                                                    count--;
                                                                    countinue;
                                                              }else{
                                                                   System.out.print(i+" ");
                                                              }
                                                              if(count==1){
                                                                      break;
                                                              }
                                                           }
但是这只能输出 人喊的数,却不能得到最终结果:  我所想要的是循环判断和输出,其中还要输出谁依次被淘汰,最后谁获得了胜利!!
  求大家给点好的思路,如果能有代码,更好··搞了一下午,我自己都晕了··

解决方案 »

  1.   

    我也刚开始学java,所以就想练习一下 ,也不知道这样做怎样public class Game {
    public static void main(String[] args) {
    StringBuffer s=new StringBuffer();
    s.append("A");
    s.append("B");
    s.append("C");
    s.append("D");
    s.append("E");
    int num=11;
    int length=s.length();
    int i=0;
    while(length!=1){
    if((i+1)%num==0){
    System.out.println(i+1);
    System.out.println(s.charAt(i%s.length())+"被淘汰");
    s.deleteCharAt(i%s.length());
    length--;
    }
    i++;
    }
    System.out.println(s+"获胜");
    }
      

  2.   

    public class Game {
    public static void main(String[] args) {
    StringBuffer s=new StringBuffer();
    s.append("A");
    s.append("B");
    s.append("C");
    s.append("D");
    s.append("E");
    Scanner sc=new Scanner(System.in);
    System.out.print("请输入一个整数:");
    int num=sc.nextInt();
    int length=s.length();
    int i=0;
    while(length!=1){
    if((i+1)%num==0){
    System.out.println(i+1);
    System.out.println(s.charAt(i%s.length())+"被淘汰");
    s.deleteCharAt(i%s.length());
    length--;
    }
    i++;
    }
    System.out.println(s+"获胜");
    }
    控制台输入的
      

  3.   

    这个很容易判断啊,直接用一个数组来表示
    开始的时候将每个人的值都设为0,当某人喊到3的倍数的时候就将其置为1
    最后输出是0的那个数就可以了。
    代码如下
    public void getLast() { int[] arr = new int[100];
    // 用来判断淘汰的人数
    int count = 0;
    // 计数用,一直增加
    int temp = 0;
    while (count < 99) { for (int i = 0; i < arr.length; i++) {
    // 如果没有淘汰
    if (arr[i] == 0) {
    // 接着喊数
    temp++;
    // 如果是3的倍数
    if (temp % 3 == 0) {
    // 淘汰掉
    arr[i] = 1;
    // 淘汰人数加1
    count++;
    }
    }
    }
    }
    // 找出剩下的那个人,输出
    for (int j = 0; j < arr.length; j++) {
    if (arr[j]==0) {

    System.out.println("剩下的是第" + (j + 1) + "个");
    }
    } }
      

  4.   

     StringBuffer s=new StringBuffer();
            s.append("A");
            s.append("B");
            s.append("C");
            s.append("D");
            s.append("E");
            int num=11;
            int length=s.length();
            int i=0;
            while(length!=1){
                if((i+1)%num==0){
                    System.out.println(i+1);
                    System.out.println(s.charAt(i%s.length())+"被淘汰");
                    s.deleteCharAt(i%s.length());
                    length--;
                }
                i++;
            }
            System.out.println(s+"获胜");
      

  5.   

    你这个不对吧,验证一下,num=2的时候:
    2
    B被淘汰
    4
    E被淘汰
    6
    D被淘汰
    8
    C被淘汰
    A赢:
    实际的结果是c赢
      

  6.   

    依次淘汰
    int n = 3;
    ArrayList<String> arr = new ArrayList<String>();
    arr.add("a");
    arr.add("b");
    arr.add("c");
    arr.add("d");
    arr.add("e");
    for (int i = 0, j = 0; arr.size() > 0;) {
    if (j < n - 1) {
    j++;
    if (i < arr.size() - 1) {
    i++;
    } else if (i == arr.size() - 1) {
    i = 0;
    }
    } else if (j == n - 1) {
    j = 0;
    System.out.println(arr.get(i));
    arr.remove(i);
    if (i < arr.size() - 1) { } else if (i == arr.size()) {
    i = 0;
    }
    } else { }
    }
      

  7.   

    A=6如果要被淘汰!答案在下         如果不被淘汰我就不知道为什么了!!
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<String> list = new ArrayList<String>();
    list.add("A");list.add("B");list.add("C");list.add("D");list.add("E"); int num = 3; while(list.size()>=num){
    for(int i=0 ; i<list.size() ;i++)
    {
    if((i+1)%num==0){
    list.remove(i);
    }
    }

    }

    for(String str : list){
    System.out.println("胜利者:"+str);
    }


    }
      

  8.   

    abc(3)de 剩 abde 喊到5
    a(6)bde(9)剩 bd 喊道9
    b(10、12)d(11) 最后获胜者应该是d吧,难道我又理解错了? 
      

  9.   

     我写错了 ,6 也应该被淘汰···  程序到是写好了 就是觉得有点复杂··主要是jAvA没有动态数组··
      

  10.   


    谢谢大家的帮助··这是我自己写的 因为我想用动态数组,却用不了··所有就用这种方式写的 ,就是太麻烦了··
    import java.util.Scanner;
    public class kk { /**
     * @param args
     */
    public static void main(String[] args) {
    Scanner input= new Scanner(System.in);
    String [] name={"A","B","C","D","E"};
    System.out.println("请输入一个数:");
    int num= input.nextInt();
      
            int j=0;
            int count=name.length;
            while(count!=1){
             for(int i=0;i<name.length;i++){
             j++;
             if(!(name[i].equals("1"))){
            
             if(j%num==0&&count>1){
             System.out.println(name[i]+"喊:"+j+"被淘汰了!!");
             name[i]="1";
             count--;
            
             }else{
            
             System.out.println(name[i]+"喊:"+j);
            
             }
             }else{
             j--;
             }
             }
            
            
            }
            for(int i=0;i<name.length;i++){
             if(!(name[i].equals("1"))){
             System.out.println(name[i]+"获得了胜利!!");
             }
            }
    }}
      

  11.   

    这道题最好用面向对象的方式来思考,面向过程的话有点难
    下面是我的代码,我只考虑3的倍数(其实尾数含3我也写出来了,请参见注释),请参考
    package NumberGame;public class Person {
     
     private String name;
     private int index;

     public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getIndex() {
    return index;
    }
    public void setIndex(int index) {
    this.index = index;
    }}package NumberGame;import java.util.ArrayList;
    import java.util.List;public class NumberGameDriver { /**
     * @param args
     */
    private List personList = new ArrayList();

    private static int maxIndex;

    private int divisor = 3;


    private  NumberGameDriver() {
    int a = 64;
    for (int i = 1; i <= 5 ; i++) {
    Person p = new Person();
    p.setName(String.valueOf((char) (a + i)));
    p.setIndex(i);
    personList.add(p);
    }

    }

    public List getList(){
    return personList;
    }

    public int getMaxIndex()
    {
    return ((Person)personList.get(personList.size()-1)).getIndex();
    }

    public void removeElement(){
    for(int i = 0;i < personList.size();i++){
    int index = ((Person)personList.get(i)).getIndex();
    String indexStr = String.valueOf(index);
    if(index%divisor == 0 || indexStr.substring(indexStr.length()-1, indexStr.length()).equals(String.valueOf(divisor))){
    personList.remove(i);
    }//如果你要考虑尾数含有3的话,需要将这个if拆分 }
    }

    public void setIndex(){
    for(int i = 0;i<personList.size();i++){
    ((Person)personList.get(i)).setIndex(maxIndex+i+1);
    }
    } public static void main(String[] args) {
    // TODO Auto-generated method stub
    NumberGameDriver gd = new NumberGameDriver(); for (;;) {
    maxIndex = gd.getMaxIndex();
    gd.removeElement();
    if (gd.getList().size() == 1) {
    break;
    }
    gd.setIndex(); // for(int i = 0 ;i<gd.getList().size();i++){
    // System.out.println(((Person)gd.getList().get(i)).getName()+"   "+((Person)gd.getList().get(i)).getIndex());
    // } } System.out.println("result:" + ((Person) gd.getList().get(0)).getName()
    + "   " + ((Person) gd.getList().get(0)).getIndex());
    }}
      

  12.   

    受到启发,修改如下:
    StringBuffer sbuf = new StringBuffer();
    sbuf.append("ABCDE");
    int count = 1;
    int pos = 0;
    int num = 3;
    while (sbuf.length() > 1)
    {
    if (count % num == 0
    || String.valueOf(count).indexOf("" + num) > -1)
    {
    System.out.println(sbuf.charAt(pos) + "喊" + count + " 被淘汰!");
    sbuf.deleteCharAt(pos);
    pos = pos % sbuf.length();
    }
    else
    {
    System.out.println(sbuf.charAt(pos) + "喊" + count);
    pos = (pos + 1) % sbuf.length();
    }
    count++;
    }
    System.out.println(sbuf + " 获得胜利!");