大众信息网

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)。返回:
移除的元素。
全部回答
  • 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] 所以可能有错误
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯