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

失落夏天 失落夏天 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
题目地址: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);

}
}
...全文
评论 4
收藏 已收藏
分享
返回顶部
失落夏天
失落夏天 优质创作者: 操作系统技术领域 优质创作者: 操作系统技术领域领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
Java 51,407 成员 86,127 内容