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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘文秀 中级黑马   /  2016-8-2 22:11  /  356 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

10、有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人

3 个回复

倒序浏览
import java.util.ArrayList;
public class Test {
        public static void main(String[] args) {
                ArrayList<Integer> al = new ArrayList<>();
                for(int i = 1;i <= 100;i++){
                        al.add(i);
                }
                int count = 0;
                for(int i = 0;i < al.size();i++){
                        if(al.size() >= 14){
                                al.remove(13);
                                i = 0;
                        }else{
                               
                                if(14%al.size() == 0){
                                        al.remove(al.size()-1);
                                        i = 0;
                                }else{
                                al.remove(14%al.size()-1);
                                i = 0;
                                }
                        }
                        if(al.size()==1){
                                break;
                        }
                        System.out.println(al);
                }
                System.out.println(al);
               
        }
}
快死了,求大神来个更简单的。。。
回复 使用道具 举报
caolufo 来自手机 中级黑马 2016-8-3 00:33:42
藤椅
本帖最后由 caolufo 于 2016-8-3 14:41 编辑

留下的是第92人。
参照课程day1给的50道题库有类似的题:是报数为3的人出列。有些不好理解。
回复 使用道具 举报
n人报数,报到m的人推出:
[Java] 纯文本查看 复制代码
public class Test9 {

	public static void main(String[] args) {
		baoshu(100,14);
	}

	public static void baoshu(int n, int m) {
		//定义数组变量标识某人是否还在圈内,初始值为true
		boolean[] flags=new boolean[n];
		for (int j = 0; j < flags.length; j++) {
			flags[j]=true;
		}
		int countNum=0;//定义报的数
		int index=0;   //定义索引
		int inCount=n; //定义在圈内的人数
		while(inCount>1){
			if(flags[index]){
				countNum++;
			   if (countNum==m) {
				   flags[index]=false;
				   inCount--;
				   countNum=0; 
			   }   
			}
			index++; 
			if (index==n) 
				index=0;
		}
		
		
		for (int i = 0; i < flags.length; i++) {
			if (flags[i]) {
				System.out.println("留下的是第"+(i+1)+"个人");
			}	
		}
		
	}

}


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马