报数游戏
作者:互联网
题目
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
思路
第一思路是链表,后来细思觉得没有必要这么麻烦,其实可以通过一个布尔数组来标志人的存活状态,只要只剩一个人了就是最后存活的人,其数组索引+1便是他的标号。
代码
public static int theLastSurvivor(int peopleNum){
int index=0;//当前索引
int currentCount=1;//当前人报的数
boolean [] islives = new boolean[peopleNum];//false代表已出局,true代表存活
int livingNum = islives.length;
for(int i=0;i<peopleNum;i++){
islives[i]=true;//初始化
}
while(livingNum>1){
if(islives[index]){
if(currentCount==3){
islives[index]=false;
livingNum--;
currentCount=1;
}else {
currentCount++;
}
}
index++;
if(index==peopleNum){
index=0;//若到结尾,从头遍历
}
}
for(int i=0;i<islives.length;i++){
if(islives[i])
return i+1;
}
return 0;
}
段落总是简写
发布了40 篇原创文章 · 获赞 10 · 访问量 2649
私信
关注
标签:currentCount,index,游戏,int,islives,peopleNum,报数 来源: https://blog.csdn.net/weixin_41746577/article/details/104005417