A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 来男. 中级黑马   /  2014-5-5 15:23  /  1022 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 来男. 于 2014-5-7 14:52 编辑

package cn.itcast.day2;

import java.util.*;

/*题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
凡报到3的人退出圈子,问最后留下的是原来第几号的那位。*/
public class WuYi2 {

        public static void main(String[] args) {
                System.out.println("请输入参加人数:");
               
                //引入扫描器
                Scanner input=new Scanner(System.in);
                int person=input.nextInt();
               
                //建个boolean类型数组,判断人进出的情况
                boolean[] flag=new boolean[person];
               
                for (int i = 0; i < flag.length; i++) {
                        //将所有都标记成圈内人
                        flag=true;
                }
               
                //依次初始化参加人数、报号数和变化标记
                int count=person,number=0,index=0;
               
                //人数必须大于1,基数最少为2
                while(count>1){
                        //从第一个人开始报
                        if(flag[index]){
                                //报号数每次增1
                                number++;
                                
                                //当报号数为3时
                                if(number==3){
                                        //当前的人出去
                                        flag[index]=false;
                                       
                                        //报号数重新开始
                                        number=0;
                                       
                                        //人数减1
                                        count--;
                                }
                        }   
                        index++;
                        
                        //当索引为数组长度时,取不到人了,数组下标越界,Index归零
                        if(index==person){
                                index=0;
                        }
                }
               
                //遍历数组,此时只剩1人
                for (int j = 0; j < person; j++) {
                        if(flag[j]){
                                System.out.println("原始的数是:"+(j+1));
                        }
                }        
        }
}

之前做完这道题被告知不对...想问:是不符题意、逻辑混乱、结果错误还是别的什么的?求解!


1 个回复

倒序浏览
本帖最后由 张然龙 于 2014-5-5 18:51 编辑

报告数不是清零了 而是从你出去的那个人开始从新报数,因为他们是个圈子,最后应该剩下一个人才是对的!!  所以你的题是错的!。。。
这个题我开始也做来着 就差一点了, 不知道错哪里了!。。毕竟这是考试题 ,检测实力的 我也没敢发帖子问。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马