报数游戏 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数, 直到最后剩下一个孩子为止。问剩下第几个孩子。
前几天笔试做到了类似的题,当时题目没怎么读懂,自己写了一个给大家。
大致的思路是:把n个孩子变成一个boolean字符串,全部赋值为真,当被点到名,就把这个位置上的人变为false,当这个数组只剩下一个true的时候就能结束循环了,把当前这个位置返回出来
用一个变量i来存储数组位置,当i等于数组长度的时候让i=0,从新开始。
用j来存储是否计数到3了,到3就把数组改为false,再把j归位为0,寻找下一个3
public static int myfun(int n){
//存储最后的位置
int wei=-1;
//把n个孩子变成一个数组,方便后面计算
boolean a[]=new boolean[n];
for(int i=0;i<n;i++)
{
a[i]=true;
}
int i=0;
int j=0;
boolean flag=true;
while(flag)
{
//判断方法,如果这个数组里面只有一个true了就返回真
if(empy(a))
{
for(int g=0;g<n;g++)
{
if(a[g])
{wei=g+1;}
}
break;
}
if(a[i])
j++;
if(j==3)
{
a[i]=false;
j=0;
}
i++;
if(i>=n)
i=0;
}
return wei;
}
//一个判断方法,如果这个数组里面只有一个true,就返回真
public static boolean empy(boolean a[]){
int count=0;
//判断是否只有最后一个数了
for(int tmp=0;tmp<a.length;tmp++)
{
if(a[tmp]==true)
{count++;}
}
if(count==1)
{
return true;
}
return false;
}