求解

hey_a_hao 2009-12-21 09:09:27
n个人围成一个圈 1 2 3 1 2 3的数数 数到3的退出 求最后留下的2个人在数数之前在什么位置 写一java程序实现
...全文
135 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
墨水鱼 2009-12-26
  • 打赏
  • 举报
回复

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

public class Test {

public static void main(String[] args) throws Exception {
Test.count(2);//测一下无效的输入
Test.count(100);//测100个人
}

public static void count(int num) {
if (num <= 2) {
System.out.printf("输入人数错误:%d\n", num);
return;
}
//初始化一个List数组,从1开始分配编号
List<Integer> list = new ArrayList<Integer>(num);
for (int i = 1; i <= num; i++) {
list.add(i);
}
//开始数数
int counter = 1, pos = 0, size = list.size();
while (size > 2) {
if (counter == 3) {
list.remove(pos);
size = list.size();
pos--;
}
if (++pos == size) {
pos = 0;
}
if (++counter > 3) {
counter = 1;
}
}
//打印最后剩下两人的初始编号
System.out.println("最后两个人的编号是:" + list.toString());
}
}
hey_a_hao 2009-12-26
  • 打赏
  • 举报
回复
同志们  想出来了  下面接晓答案
int n = 10;//人数
boolean[] a = new boolean[n];
for(int i=0;i<n;i++){
a[i] = true;
}
int leftCount = n;//用于记录循环
int num=0;//用于记录位置
int place;//用于记录当前位置
while(leftCount>2){
if(a[place]==true){
num++;
if(num==3){
a[place]=false;
num=0;
leftCount--;
}
}
place++;
if(place==a.length){
place=0;
}
}
System.out.println("最后两人在数数之前的位置是:");
for(int i=0;i<n;i++){
if(a[i]==true){
System.out.print((i+1)+" ");
}
}
wmdtksmld 2009-12-25
  • 打赏
  • 举报
回复
好好想想吧
crazylaa 2009-12-24
  • 打赏
  • 举报
回复
数组+递归应该可以实现
hey_a_hao 2009-12-24
  • 打赏
  • 举报
回复
肯定了 只是数到3的退出 到最后就算只有3个存在 但还是有3不 3又退出 所以最后只会乘2个 我晕
lyan99 2009-12-23
  • 打赏
  • 举报
回复
你确定最后留下的是2个人不是1个人??
swandragon 2009-12-22
  • 打赏
  • 举报
回复
约瑟夫环
如一宝宝 2009-12-21
  • 打赏
  • 举报
回复
算法题,等高手出现
相关推荐
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2009-12-21 09:09
社区公告
暂无公告