黑马程序员技术交流社区
标题:
大神求回复
[打印本页]
作者:
邬jerry
时间:
2015-10-11 17:18
标题:
大神求回复
20个人站成一圈,编号0~19,从编号0开始报数1.....,遇到3的倍数的就剔除去,循环报数,最后剩一个人,他的编号是多少号?程序如何实现,话说3个小时内能做出来比较适合程序员?
作者:
莫盛强
时间:
2015-10-11 19:06
这不是数组吗?循环,判断(i%3==0)
作者:
didixyy
时间:
2015-10-11 19:35
定义一个数组,for 循环就可以了,满足条件就从数组里删除它
作者:
Smilexs
时间:
2015-10-11 19:46
public static void main(String[] args) {
int k=3;//k的倍数淘汰
ArrayList<Integer> datas = new ArrayList<Integer>();
datas.add(1);
datas.add(2);
datas.add(3);
datas.add(4);
datas.add(5);
datas.add(6);
datas.add(7);
datas.add(8);
datas.add(9);
datas.add(10);//10个人,可自行添加,最好用数组初始化,再转成链表,这里就不做了!
int count =1;//报的数
while(datas.size()!=1){//只有一个元素,退出
for (int i = 0; i < datas.size(); i++) {
if(count%3==0){
datas.remove(i);
i--;//删除,元素向前移了
}
count ++;
}
}
System.out.println("剩下的号数是:"+datas.get(0));
}
复制代码
作者:
didixyy
时间:
2015-10-11 20:20
好吧得用递归才行。我想了好久FOr循环好像不行
package day2;
import java.util.ArrayList;
public class test123 {
public static void main(String[] args) {
int a = 20;
int b = 3;
System.out.println(ysf(a,b));
}
static int ysf(int a,int b){
if(a==1)
{
return 0;
}
System.out.println( (ysf(a-1,b) +b) % a);
return (ysf(a-1,b) +b) % a;
}
}
复制代码
作者:
李三思第一次
时间:
2015-10-11 20:23
楼上都是大神啊!膜拜!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2