n个人循环报数1-3问题
2016-03-21 20:52
357 查看
问题描述: 标号1-n的n个人首尾相接,报数1-3,报到3者退出,问剩下最后一人标号。
public int lastPerson(int n) {if(n <= 1)
return n;
int lastPerson = 0;
boolean[] personList = new boolean
;
for(int i = 0; i < n; i++){
personList[i] = true;
}
int nTmp = n; //当前剩余人数
int start = 0; //当前开始报数位置
int cnt = 0; //计数器
// 进行报数,直到仅剩下1人
while(true){
if(personList[start] == true){
cnt++;
}
if(cnt == 3){
personList[start] = false;
cnt = 0;
nTmp--;
}
if(nTmp == 1){
break;
}
start++;
if(start == n){
start = 0;
}
}
//找出这一人
for(int i = 0; i < n; i++){
if(personList[i] == true){
lastPerson = i + 1;
}
}
return lastPerson;
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树