50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?在原来的位置是多少(简单易懂)
来源:互联网 发布:青岛网络电视台爱社区 编辑:程序博客网 时间:2024/05/29 17:04
该题目的圈的元素个数是50个,每次数到3或3的倍数的时候,就把当前元素出圈,并且继续数数(假设删掉的是6的那个数字,那么下一个叫7而不是叫6),直到再遇到3的倍数。这里,如果下标从0开始,一直到一圈完成以后,它就会接到圈的首部,这应该如何处理呢?其实,最好的办法就是使用取余的办法,就可以始终得到3个倍数,无论它的倍数是多少,也不管它的元素个数是多少。
由于每次去掉元素以后,元素的个数会少一个,因此下一个3的倍数其实只需要走两步,在为其下标赋值的时候,需要减一,保持每次去掉的元素都是3的倍数。
说明:如果使用从0开始的下标开始计算,那么初始化的时候应该使用-1(对应后来的index--),这样就可以模拟元素已经减少一个了(令起始数字为123,初始化为-1,下一个去掉的数字就是3).如果下标为0的被删除,下标为1的还没有被删除,这时候下标为1的数字的下标自动为0。
public class CycleTest {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("该数字原来的位置是:" + cycle(50,3));}private static int cycle(int total, int k) {List<Integer> dataList = new LinkedList<Integer>();for (int i = 0; i < total; i++) {dataList.add(new Integer(i+1));}int index = -1;while (dataList.size()>1) {index = (index + k)%dataList.size();dataList.remove(index--);//去除该数字,index减一displayList(dataList);//清除后打印,观察结果System.out.println();}//return dataList.get(0);也可以替换下一行return ((Integer)dataList.get(0)).intValue();}private static void displayList(List<Integer> dataList) {for (int i = 0; i < dataList.size(); i++) {int a = dataList.get(i);System.out.print(a + " ");}}}
大家可以简单的测试下,比如测试5个数,当个数比较少的时候更能理解其原理。
参考文章:http://blog.csdn.net/hi_kevin/article/details/17678239
0 0
- 50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?在原来的位置是多少(简单易懂)
- 50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?在原来的位置是多少
- 50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?在原来的位置是多少
- java编程题:50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁,在原来的位置是多少?
- n个人围成一圈数到m和m的倍数时出圈,问剩下的人是谁?在原来的位置是多少?
- 50个人围成一圈数到三和三的倍数时出圈,问剩下的人是谁?在原来的位置是多少?
- 50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?
- 50个人围成一圈数数,数到3的倍数时出圈,最后剩下的人是谁?
- N个人围成一圈数数,每当数到3的倍数时出圈,最后剩下的人是谁?
- 50个人围成一圈数到三和三的倍数时出圈,在原来的位置是多少
- 50个人围成一圈数到三和三的倍数时出圈,在原来的位置是多少?
- 50个人围成圈,数到3和3的倍数时出圈,求剩下的人及其原来的位置
- 50个人围成一圈报数,遇到3的倍数,自动退出,最后剩下的人原来的位置是多少
- 50人围一圈,从第一个人报数,3和3的倍数出圈,最后剩下一个人是几号,java实现
- 有17个人围成一圈(编号为0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。问此人原来的位置是多少号?
- 500个小孩 围一圈,数到3退出,问最后剩下的小孩,原来是多少号
- 50个人,数到3和3的倍数即退出,问最后剩下谁?
- n个人围成一圈,从第1个人开始数数,数到3的人出圈,输出出圈人的顺序
- Java文件下载
- 千万级并发实现的秘密:内核不是解决方案,而是问题所在!
- redhat下配置c++开发环境
- DAVE SDK 4.1.2 Help content (翻译)——Signals and Connections
- MySQL Study之--MySQL Cluster(集群)构建
- 50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?在原来的位置是多少(简单易懂)
- python类、对象区别
- java基础---枚举(enum)
- 相关向量机的MATLAB代码
- JS学习第六天----表达式和运算符
- Ubuntu中root用户和user用户的相互切换
- Android应用:获取屏幕大小和密度
- Android Fragment 真正的完全解析(下)
- 框架服务器报错