要求编写一个java程序:
15个地球人和15个火星人乘宇宙飞船访问嫦娥,中途遇到玉兔打劫,飞船受损,船长猪八戒告诉乘客,只有将全船一半乘客投入太空,才能避免全部去见玉帝。于是30个人围成一圈,由第...
15个地球人和15个火星人乘宇宙飞船访问嫦娥,
中途遇到玉兔打劫,飞船受损,船长猪八戒告诉乘客,
只有将全船一半乘客投入太空,才能避免全部去见玉帝。
于是30个人围成一圈,由第1个人数起,依次报数,数到
第9人,便把他投入大海中,然后再从他的下一个人数起,
数到第9人,再将他扔到大海中,如此循环地进行,直到
剩下15个乘客为止。结果15个火星人全部变成了宇宙卫星。
请问,地球人坐在了哪些位置以避免自己被抛出? 展开
中途遇到玉兔打劫,飞船受损,船长猪八戒告诉乘客,
只有将全船一半乘客投入太空,才能避免全部去见玉帝。
于是30个人围成一圈,由第1个人数起,依次报数,数到
第9人,便把他投入大海中,然后再从他的下一个人数起,
数到第9人,再将他扔到大海中,如此循环地进行,直到
剩下15个乘客为止。结果15个火星人全部变成了宇宙卫星。
请问,地球人坐在了哪些位置以避免自己被抛出? 展开
3个回答
展开全部
这个讲得麻烦,其实只是求循环顺序为9 的倍数的位置 。剩余的就是地球人的位置。
代码待会儿试着写个看看。
被扔出的位置已经算出来了。
第1轮抛出:位置:09
第2轮抛出:位置:18
第3轮抛出:位置:27
第4轮抛出:位置:06
第5轮抛出:位置:16
第6轮抛出:位置:26
第7轮抛出:位置:07
第8轮抛出:位置:19
第9轮抛出:位置:30
第10轮抛出:位置:12
第11轮抛出:位置:24
第12轮抛出:位置:08
第13轮抛出:位置:22
第14轮抛出:位置:05
第15轮抛出:位置:23
整下整个的代码。
import java.util.ArrayList;
import java.util.List;
public class CirclePlus {
private List<String> seats = new ArrayList<String>();
//初始化
public CirclePlus(){
if(seats.size()>=0){
for(int i=0;i<30;i++){
seats.add("位置:"+((i+1)>=10?(i+1):"0"+(i+1)));
}
}
}
//踢人方法
public void Kick(int num){
//记录当前被踢人的座位
int tempseat = 0;
//当前要踢的座位
int nowseat = 0;
//记录当前是第几轮
int loop = 1;
//当是15轮时退出
while(loop<=15){
//要踢的人的座位号是上次被踢的座位号+num,-1是因为LIST的编号比真实座位号小1
nowseat = tempseat+num-1;
// System.out.println("nowseat=="+nowseat+"\ntempseat=="+tempseat+"\nloop=="+loop);
//如果要踢的超出当前人数范围,则从第一个人开始重新算起(减掉当前人数)
if(nowseat>=seats.size()){
//为符合上面踢人座位号(nowseat)计算,除去减掉当前人数(seats.size())外,要加回修正值(上面减掉的1),
//以保证 要踢人的座位号(nowseat) 是正确的
tempseat=nowseat-seats.size()-num+1;
}else{
//踢人
System.out.println("第"+loop+"轮抛出:"+seats.remove(nowseat));
//保存当前被踢的座位号
tempseat = nowseat;
//轮次增加
loop++;
}
}
System.out.println("踢人后剩余的安全座位号:");
for(String string: seats){
System.out.println(string);
}
}
public static void main(String[] args) {
CirclePlus cp = new CirclePlus();
cp.Kick(9);
}
}
OK了,换成while循环才弄好。。用for循环直接算座位号误差太大了,还是一个个算。
更多追问追答
追答
你就不能直接放代码么,为什么截图。。。这样我都没法测试。
算了,我自己手打个。。
你这个代码有问题啊。。算法和我原来用for循环的一样,没法得到正确的答案:
修正以后的代码:
import java.util.ArrayList;
public class AirShip {
public static void main(String[] args) {
int i = 0, j = 8, flag = 30;
ArrayList<Integer> ii = new ArrayList<Integer>();
for (; i < 30; i++) {
ii.add(i);
}
do {
if (j < flag) {
System.out.println(j + " " + flag);
ii.remove(j);
j += 9;
flag--;
} else {
flag = ii.size();
j = j - flag;
}
} while (flag != 15);
for (i = 0; i < 15; i++) {
System.out.println(ii.get(i));
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询