求高手帮忙写个java程序。高手请进......急啊!!! 5
题目:假如有50个人列队站成一列。然后第一个人开始报数。依次为1,2,3,4......50。然后报数为3的倍数的人出列。剩下的人重新从1,2,3.....报数,报数为3...
题目:假如有50个人列队站成一列。然后第一个人开始报数。依次为1,2,3,4......50。然后报数为3的倍数的人出列。剩下的人重新从1,2,3.....报数,报数为3的倍数的人出列。剩下的人重新报数。依次类推。问题:用java实现最后一个出列的人是原来50人中的第几个人(即第一次报数的数字)
展开
展开全部
我日 最讨厌算法题.......看的我蛋疼...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(int i=1;i<50;i++){
int s=2;
if(i==3)
s++;
}
return s;
int s=2;
if(i==3)
s++;
}
return s;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
package test;
public class testMain {
/**
* @param args
* @other
* @author Kevin
*/
private static int[] tempArr = new int[50];
public static void main(String[] args) {
count(tempArr);
}
private static void count(int[] arr) {
int k = 0;
int j = 0;
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0) {
k++;
if (k % 3 == 0) {
tempArr[i] = 1;
j = i;
}
}
}
int result = 0;
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0) {
result++;
}
}
if (result > 2) {
count(tempArr);
} else {
System.out.println("最后一个退出的是第" + j + "个人。");
}
}
最后输出的J要+1, 忘了。。。
}
public class testMain {
/**
* @param args
* @other
* @author Kevin
*/
private static int[] tempArr = new int[50];
public static void main(String[] args) {
count(tempArr);
}
private static void count(int[] arr) {
int k = 0;
int j = 0;
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0) {
k++;
if (k % 3 == 0) {
tempArr[i] = 1;
j = i;
}
}
}
int result = 0;
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0) {
result++;
}
}
if (result > 2) {
count(tempArr);
} else {
System.out.println("最后一个退出的是第" + j + "个人。");
}
}
最后输出的J要+1, 忘了。。。
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int[] a = {1,2,3...50};
public static void kill(a) {
int non-zeor-index = a.non-zeor;//找到第一个非0
int count = 0;
for (int i = non-zeor-index; i < a.lenght;i++) {
if (a[i] == 0){}; // 如果是0,下一个
else {
if( count % 3 == 0) {a[i] = 0; count = 0;}//如果第三个,抹去
else {count++;}//否则继续往后
}
}
kill (a);
}
当然这是最慢的方法,可以考虑直接继续按结果
对于一般的,有个给你参考,2个一杀的情况有
j(1)=1;
j(2n) = 2j(n)-1; n为偶数
j(2n+1) = 2j(n) + 1; n为奇数
public static void kill(a) {
int non-zeor-index = a.non-zeor;//找到第一个非0
int count = 0;
for (int i = non-zeor-index; i < a.lenght;i++) {
if (a[i] == 0){}; // 如果是0,下一个
else {
if( count % 3 == 0) {a[i] = 0; count = 0;}//如果第三个,抹去
else {count++;}//否则继续往后
}
}
kill (a);
}
当然这是最慢的方法,可以考虑直接继续按结果
对于一般的,有个给你参考,2个一杀的情况有
j(1)=1;
j(2n) = 2j(n)-1; n为偶数
j(2n+1) = 2j(n) + 1; n为奇数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询