java初级题,求解
答案:6 mip版
解决时间 2021-01-08 10:14
- 提问者网友:萬裏夢魂
- 2021-01-08 03:06
l (Java语言)有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程,请完善之(提示:报数的过程被与之逻辑等价的更容易操作的过程所代替)。
Vector a = new Vector();
for(int i=1; i<=10; i++)
{
a.add("第" + i + "个孩子");
}
for(;;)
{
if(a.size()==1) break;
for(int k=0; k<2; k++)
________________;
a.remove(0);
}
System.out.println(a);
最佳答案
- 二级知识专家网友:陪我去流浪
- 2021-01-08 04:06
回答者: ahanqiankun
解答
a.add(a.remove(0));
正确。
for(int k=0; k<2; k++)
________________;
处没有括弧,而且只有一个空,不能填写两行语句。
思路:
1. 由于a.remove(0); 明显是要移除出列的孩子,也就是报3的。但是remove的function是移除Index是0的元素,也就是第一个人。所以第一点就是要把3的放在最前面。就一定要把3之前的重新排序,简单就是要放在最后。
2. 另一个考点就是要知道Vector 中remove(int index)这个function的返回,是元素对象,而不是一般人认为的void.
public E remove(int index)移除此向量中指定位置的元素。将所有后续元素左移(将其索引减 1)。返回:
移除的元素。
解答
a.add(a.remove(0));
正确。
for(int k=0; k<2; k++)
________________;
处没有括弧,而且只有一个空,不能填写两行语句。
思路:
1. 由于a.remove(0); 明显是要移除出列的孩子,也就是报3的。但是remove的function是移除Index是0的元素,也就是第一个人。所以第一点就是要把3的放在最前面。就一定要把3之前的重新排序,简单就是要放在最后。
2. 另一个考点就是要知道Vector 中remove(int index)这个function的返回,是元素对象,而不是一般人认为的void.
public E remove(int index)移除此向量中指定位置的元素。将所有后续元素左移(将其索引减 1)。返回:
移除的元素。
全部回答
- 1楼网友:千里故人稀
- 2021-01-08 08:12
这个问题可以这样想,报完一圈后被3整除 的剔除,下一圈的报数接着上一圈之后,楼主只要把过程理清了就可以了,
可以定义一个全局变量lastcount来计数,比如有N个人,报一圈下来就把lastcount=N 然后第二圈有M个人 lastcount=lastcount+M,
- 2楼网友:獨守空城
- 2021-01-08 08:00
public class Count3Quit2 {
public static void main(String[] args) {
KidCircle kc = new KidCircle(500);
int countNum = 0;
Kid k = kc.first;
while(kc.count > 1) {
countNum ++;
if(countNum == 3) {
countNum = 0;
kc.delete(k);
}
k = k.right;
}
System.out.println(kc.first.id);
}
}
class Kid {
int id;
Kid left;
Kid right;
}
class KidCircle {
int count = 1;
Kid first, last;
KidCircle(int n) {
for(int i=0; i<n; i++) {
add();
}
}
void add() {
Kid k = new Kid();
k.id = count;
if(count <= 1) {
first = k;
last = k;
k.left = k;
k.right = k;
} else {
last.right = k;
k.left = last;
k.right = first;
first.left = k;
last = k;
}
count ++;
}
void delete(Kid k) {
if(count <= 0) {
return;
} else if (count == 1) {
first = last = null;
} else {
k.left.right = k.right;
k.right.left = k.left;
if(k == first) {
first = k.right;
} else if( k == last) {
last = k.left;
}
}
count --;
}
}
- 3楼网友:柚旅时光机
- 2021-01-08 07:24
public class Count3Quit2 {
public static void main(String[] args) {
KidCircle kc = new KidCircle(500);
int countNum = 0;
Kid k = kc.first;
while(kc.count > 1) {
countNum ++;
if(countNum == 3) {
countNum = 0;
kc.delete(k);
}
k = k.right;
}
System.out.println(kc.first.id);
}
}
class Kid {
int id;
Kid left;
Kid right;
}
class KidCircle {
int count = 1;
Kid first, last;
KidCircle(int n) {
for(int i=0; i<n; i++) {
add();
}
}
void add() {
Kid k = new Kid();
k.id = count;
if(count <= 1) {
first = k;
last = k;
k.left = k;
k.right = k;
} else {
last.right = k;
k.left = last;
k.right = first;
first.left = k;
last = k;
}
count ++;
}
void delete(Kid k) {
if(count <= 0) {
return;
} else if (count == 1) {
first = last = null;
} else {
k.left.right = k.right;
k.right.left = k.left;
if(k == first) {
first = k.right;
} else if( k == last) {
last = k.left;
}
}
count --;
}
}
执行一下就ok了
- 4楼网友:無字情書
- 2021-01-08 05:49
空白部分只要实现循环移位就可以了。从原理上来说,就是把循环移位当成了报数完成。至于实现可以有很多种做法,对应与这里的上下文的话,可能就只有一两种而已。
正确答案应该是:a.add(a.remove(0)); // 就是把第一个位置上的数据取下来,然后放到末尾。
- 5楼网友:傻ㄋ吧唧
- 2021-01-08 04:39
都看不懂题目? 一个填空题 被楼上的这么玩?
Copy成瘾了?
a.add(a.remove(k));
循环一次 三个数移除 另外两个不是3的数 加到数组的最后 可是我不知道Vector 的里面的值表示是不是a[k] 所以可能有错误
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯