编程英雄会之 报数游戏(2)

失落夏天
Android领域优质创作者
博客专家认证
2014-01-14 07:09:43
题目地址:http://hero.csdn.net/Question/Details?ID=230&ExamID=225
题目:
N个人(编号1-N),站成一排,进行报数游戏。报数过程可能进行很多轮,有如下规则:

(1) 如果剩余人数不超过3个人,则游戏结束。

(2) 大家报数,然后留下报奇数的人从第一个人继续游戏,或者留下报偶数的人继续游戏。

重复如此(1)(2)两步骤,到游戏结束。

问:最终剩下的三人组有多少种情况?(注意是三人组,例如如果最后剩下2个或者1个人,不计入结果中)。

输入n, (0<n<=10000000)

输出最终结果。

我的代码:

public class Test3 {

public static void main(String[] args) {
System.out.println(howmany(306));
}

public static int howmany(int n) {
int time=1;
int s=n;
while((s=s>>1)>1){
time=time<<1;
}
return n%time;
}

}

提交后仍然一如以往的失败,大家帮忙看看哪里有问题吧。
下面是用一般思路写的
参考,

public class Test {
static int num=0;
static Set<String> all=new HashSet<String>();
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
int n=306;
for(int i=0;i<n;i++){
list.add(Integer.toString(i+1));
}
baoshu(list);
System.out.println(all.size());
}

public static void baoshu(List<String> list){
if(list.size()==3){
num++;
StringBuilder builder=new StringBuilder();
for(int i=0;i<3;i++){
builder.append(list.get(i)+"_");
}
all.add(builder.toString());
return;
}
if(list.size()<3){
num++;
return;
}

List<String> ji_list=new ArrayList<>();
List<String> ou_list=new ArrayList<>();
for(int i=0;i<list.size();i++){
if(i%2==0){
ou_list.add(list.get(i));
}else{
ji_list.add(list.get(i));
}
}
baoshu(ji_list);
baoshu(ou_list);

}
}
...全文
290 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
求大神 赐教答案
Mourinho 2014-01-15
  • 打赏
  • 举报
回复
用不着数据结构,只要做下奇偶判断就好。 刚才一把就过了
Mourinho 2014-01-15
  • 打赏
  • 举报
回复
引用 2 楼 AA5279AA 的回复:
[quote=引用 1 楼 zyc13701469860 的回复:] 用不着数据结构,只要做下奇偶判断就好。 刚才一把就过了
我这个并没有涉及到数据结构,只是移位运算而已,省效率。[/quote] 没注意看上面的 s=s>>1;有问题 每次人数不是除2 当人数为奇数,并且奇数人留下的时候 s=s/2 + 1
失落夏天 2014-01-15
  • 打赏
  • 举报
回复
引用 1 楼 zyc13701469860 的回复:
用不着数据结构,只要做下奇偶判断就好。 刚才一把就过了
我这个并没有涉及到数据结构,只是移位运算而已,省效率。

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧