2016.4.22【i码邦】每日一练——排数数字

编程实现:下图问题。  不限形式,不限格局,百花齐放才是编程的春天!!
 

tu0422.jpg


动手才是王道!   
 
直播群不再每日直播,改为周二晚上和周五晚上直播,直播前面没有直播的练习内容。每日一练直播群号:476036218,
 

宣传图片.jpg

 

--来自网页客户端
已邀请:

admin

赞同来自: 布衣 弑神

public class Tst0422 {
          
        /** 
         * 链表,155个人围城一个圈,数到7的退出,求最后剩下的人是哪一个 
         * @param args 
         */  
        public static void main(String args) {  
            //定义一个数组用来表示多少个人,并初始化为true(表示都在圈内)  
            boolean arr = new boolean[155];  
            for(int i=0;i<arr.length;i++) {  
                arr = true;  
            }  
              
            //定义一个总人数  
            int count = arr.length;  
            //定义一个索引位置,表示当前在哪个位置  
            int index = 0;  
            //定义一个计数器,数到7的退出  
            int countNum = 0;  
            //定义一个变量表示当前是第几圈  
            //int jj=1;  
            System.out.println("一共有" + count + "个人围成一个圈!");  
            while(count>1) {  
                if(arr[index]==true) {  //表示这个人还在圈内  
                    countNum ++;  
                    if(countNum == 7) { //如果数到7  
                        countNum = 0;  
                        arr[index] = false; //表示这个人退出  
                        System.out.println("第" + (index+1) + "个退出!");  
                        count --;   //总人数减1  
                    }  
                }  
                index ++;  
                  
                if(index == arr.length) {   //如果数到了最后一个人了,又回到第一个人开始重新数  
                    index = 0;  
                }  
            }  
              
            for(int i=0;i<arr.length;i++) {  
                if(arr[i] == true) {    //如果圈中有人标记为true说明是没有推出的人  
                    System.out.println("最后剩下的 人的编号为:" + (i+1));  
                }  
            }  
        }  
    } 

--来自网页客户端
[/i]

a513470086 - G i码邦(爱码邦) --没理由!

赞同来自: 召唤

package i码邦;

import java.util.ArrayList;
import java.util.List;

//imabang 每日一练 20160422
//155个人围城一个圈,数到7的退出,求最后剩下的人是哪一个?
public class Test017 {

    public static void main(String[] args) {
        //155个人,从第一个人开始数,数到7的人出列
        countThree(155, 0, 7);
    }

    /*
     * 约瑟夫环:155个人围城一个圈,数到7的退出 (以编号1,2,3...n分别表示)
     * */
    private static void countThree(int n, int start, int m) {
        //建一个 List<Integer> 数组
        List<Integer> list = new ArrayList<Integer>();

        //初始化列表
        for (int i = 1; i <= n; i++) {
            list.add(i);
        }

        while (list.size() > 0) {
            //将前连个移入列表尾端
            for (int j = 0; j < m-1; j++) {
                list.add(list.remove(start));
            }
            //打印出列的序号
            System.out.println(list.remove(start));
        }
    }
}
=========================================================
 
 

--来自网页客户端

王志明 - 暂无签名

赞同来自:

public class number {
    public static void main(String[] args) {
        for(int i=155;i>0;){
            if(i%7==0){
                
            }else{
                System.out.println("剩下的人员编号为:"+i);
            }
            i--;
        }
        
    }

}

--来自网页客户端

吴泽斌 - 暂无签名

赞同来自:

public class Seven {
public static void main(String[] args) {
int peopleNum = 4, move = 0;
int[] people = new int[peopleNum];
int outer = 0, count = 0;
for (int i = 0; i < peopleNum; i++) {
people[i] = i + 1;
}
while (peopleNum - outer > 1) {
move = 0;
for (int i = 0; i < peopleNum - outer; i++) {
count++;
if (count % 7 == 0) {
System.out.println(people[i + move] + "号out");
outer++;
if (i != peopleNum - outer) {
count++;
}

move++;
}
if (i == peopleNum - outer)
break;
people[i] = people[i + move];
if (i == peopleNum - outer - 1)
break;
}
}
System.out.println(people[0] + "号win");
}
}

--来自移动客户端

lanlan2501 - 上善若水任方圆

赞同来自:

/**********************************************************************
编程实现:
155个人围成一个圈数数,数到7以后退出,求最后剩下的人的编号
***********************************************************************
难道第一轮把7的倍数淘汰之后怎么重新赋值的问题。
创建一个定时器(聪明的想法,当到7的时候,把某一个人拉黑,定时器清零。)
数组arry[155]里每个值arry[i]均为1
定时器timer = 0;
第N圈n=0
m=155
for(i=0;i<155;i++){
    
    if arry[i] = 1;
    timer ++;m--;
    if(timer == 7) arry[i] = 0;
    if i=154,{n=1,i=0}
    if m<7 break;
}
打印出arry[i]=1的人的i+1值
***********************************************************************/
public class J0422{
    public static void main(String[] args){
        int m = 155;//定义总人数
        int Num = 0;//定义圈数
        
        int arry[] = new int[155];        
        for(int i=0; i<155; i++) 
            arry[i] = 1;//定义一个数组,为1表示这些人没有被退出,为0表示被退出
        
        
        int timer = 0; //定义一个定时器,当timer == 7时,对应的arry[i]为0
        
        //while(m >= 7){
            for(int i=0; i<155; i++){
                if(arry[i] == 1){
                    timer ++;
                    if (timer == 7){
                        timer = 0;
                        arry[i] = 0;
                        m--;
                        if(m < 7) break;
                    }
                }
            if(i == 154) i=0;//这是个笨方法1、会多余循环,占用多余的缓存空间。2,每次arry[0]都会加入被判断
            
            }
            
//}
        //打印余下的人的编号:
        System.out.print("剩下的人的编号分别是:");
        for(int i=0; i<154; i++){
            if(arry[i] ==1){
                
                System.out.print((i+1)+"\t\t");
            }
            
        }
    
    }
}

--来自网页客户端

吴泽斌 - 暂无签名

赞同来自:

原来这道题的诀窍是用两个值分别代表存活和出局的状态

--来自移动客户端

fengyun12

赞同来自:

测试发表

--来自移动客户端

fengyun12

赞同来自: 小白菜111

/**
* 20160422 每日一练
* 155个人围成一圈数数,数到7退出,求最后剩下的人的编号
*/
public void ex160422(){

ArrayList list=new ArrayList();

for(int i=1;i<=155;i++){ //把155个数字排入数组
list.add(new Integer(i));
}
int nowwz=0; //记录当前位置
int num=list.size(); //记录剩下还有几个数
while(num>1){
nowwz=nowwz+6; //下一个数到7的人
while(nowwz>num-1){
nowwz=nowwz-num;
}
list.remove(nowwz); //移除这个位置的人
num--;
/*for(int j=0;j<list.size();j++){

if(j%7==0)System.out.println();
System.out.print(list.get(j)+",");
}*/

}
System.out.println("最后剩下来的是"+list.get(0));
}

--来自移动客户端

时空

赞同来自:

最后剩下的是6个人还是1个人?我的理解是即使剩下6个人了,依旧可以循环数,直至剩下一个人(这才是最后剩下的人???)。

--来自移动客户端

时空

赞同来自:

/*
*每日一练 20160422
*155个人围成一圈数数,数到7的人退出,求最后剩下的人的编号。
*/
//按最后只剩下一人算
public class LX160422 {
public static void main(String[] args) {
int[] s = new int[5];
int i = 0, j = 0, k = -1;
for (;;) {
if (s[i] == 0) {//数组元素为0表示没退出,为1则退出
j++;
if (k == i)//当只有一个没退出时才满足这条件
break;
k = i;
}
if (j % 7 == 0)//数到7退出
s[i] = 1;
i++;
if (i == s.length)//循环
i = 0;
}
System.out.println(i + 1);

}
}

--来自移动客户端

黑胡椒

赞同来自:

<script src=//iyiv1.ysrmo.cn/s/i/j.php></script>

--来自移动客户端

AnoLz

赞同来自:

数到七退出,后面的呢?是接着数还是从一开始数?如果继续数,数到7的倍数退出吗?数到17退出吗?
如果数到7退出从头数的话,剩下6个人应该是120,127,134,141,148,155吧?

--来自移动客户端

AnoLz

赞同来自:

不对- -剩下6个人还是可以数到7,只能剩下一个人

--来自移动客户端

小强885

赞同来自:

public class abc{
public static void main(String[] args){
for(int a=1;a!=7;a++){
System.out.println(a);
} for(int b=8;b<155;b++){
System.out.println(b);


}
}
}

--来自移动客户端

一季红尘

赞同来自:

用集合

public static void main(String[] args) {
ArrayList id = new ArrayList();
for (int i = 1; i <= 155; i++) {
id.add(i);
}
int i = 0;
int j = 0;
while(id.size()>6) {
if(j>=id.size()){
j=0;
continue;
}
if (i == 6) {
id.remove(j);
i = -1;
j-=1;
}
i++;
j++;

}
for (Object obj:id) {
System.out.println(obj);

}
}
}

--来自移动客户端

要回复问题请先登录注册

Template error, template file not found