1,2报数最后剩下的人的问题
来源:互联网 发布:matlab eig函数源码 编辑:程序博客网 时间:2024/04/29 13:10
这是一个有趣的算法问题,1,2报数问50人最后留下的是哪个人?
思路:这种报数分为两种形式一种围成一圈,另一种站成一排,前者每次都从头开始,后者首尾轮流报数
第一种情况代码如下
public class TwoByDie {private static boolean c = true;private static int max = 10;private static int[] num;/** * @param args */public static void main(String[] args) {num = new int[max];for (int i = 0; i < max; i++) {num[i] = i + 1;}method(num, true);// 人,第一个是否为2,正序倒叙}private static void method(int[] nm, boolean is) {for (int x = 0; x < nm.length; x++) {System.out.print(nm[x] + " ");}int ss = nm.length;boolean iss = (ss % 2 == 0 ? true : false);int[] nmnm;if (ss % 2 == 0) {nmnm = new int[ss / 2];} else if (!is) {nmnm = new int[ss / 2];} else {nmnm = new int[ss / 2 + 1];}//if (((ss % 2 == 0) && is) || (ss % 2 == 1) && !is) {//nmnm = new int[ss / 2];//} else {//nmnm = new int[ss / 2 + 1];//}// [ss/2+ (ss%2==0&&is)?0:1];// System.out.println(nmnm.length+" 前集合nmnm");// c=!c;if (1 == ss) {System.out.println("最后一个人是:" + nm[0]);} else {// 正序System.out.println();for (int i = is ? 0 : 1, j = 0; i < ss; i += 2, j++) {nmnm[j] = nm[i];}// if(turn){// //第一个为1// if(is){// for(int i=0,j =0;i<ss;i+=2,j++){// nmnm[j] = nm[i];// }// }else{// //第一个为2// for(int i=1,j =0;i<ss;i+=2,j++){// nmnm[j] = nm[i];// }// }// }else{// // System.out.println(ss-1+" 后续集合 ");// // for(int x = 0 ;x<ss;x++){// // System.out.println(nm[x]+" 后zhi ");// // }// if(is){// for(int i=ss-1,j=0;i>=0;i-=2,j++){// //System.out.println(j+" 后续集合 ");// nmnm[j] = nm[i];// }// }else{// //第一个为2// for(int i=ss-2,j=0;i>=0;i-=2,j++){// nmnm[j] = nm[i];// }// }// }method(nmnm, iss);// 人,第一个是否为2,正序倒叙}}}实现的方法很简单,只是为每次都新建的int数组附长度的时候想了一下
其实第二种场景就在注解里,有空我再好好把方法归结下来!
想这样的东西真的很好玩,此类文章未完待续!
0 0
- 1,2报数最后剩下的人的问题
- 圆圈报数最后剩下的数 约瑟夫环问题 Joseph
- n个人报数退出问题,数到m退出,最后剩下的是几号
- 报数游戏 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数, 直到最后剩下一个孩子为止。问剩下第几个孩子。
- n个人排成一圈,从1开始报数,数到3,退出,剩下的最后一个人
- 有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。
- 有n个人围成一圈,从第1个人开始,1、2、3报数,报至3出局,余下的人继续从1、2、3报数,问:最后剩下的一人是原来的第几号?同时求出被淘汰编号的序列。(要求:用循环队列解决该问题。)
- n个人排成一圈,从1到3报数,数到3的人出列,输出最后剩下的哪个人是原来的第几号
- 50个人围成一圈报数,遇到3的倍数,自动退出,最后剩下的人原来的位置是多少
- 约瑟夫环 :n个人站成一圈 1-m报数 报到m的人 跳出圈外 最后一个剩下的是谁?
- C:n人站成一圈,报数到m的人离开队伍,求最后剩下的是第几人
- 多个人围成一圈报数,数到固定值的人出列,求最后剩下的人
- n个人围成一圈报数,从1报到3,报到3的人退出,然后依次循环,直到剩下最后一人,这人是第几个人?
- 50人围一圈,从第一个人报数,3和3的倍数出圈,最后剩下一个人是几号,java实现
- 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出, 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
- 有 100 个人围成一个圈,从 1 开始报数,报到 14 的这个人就要退出。然后其他人重新开始, 从 1 报数,到 14 退出。问:最后剩下的是 100 人中的第几个人?
- 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
- 约瑟夫环的问题---最后剩下哪一个
- Android Studio 里面 导入SlidingMenu
- 网络远程教育实施方案交流之(三)——服务器架构及视频存储方案
- 数据仓库基础知识~
- zoj3885最小费用最大流
- 报表与微信公众号(企业号)集成方案
- 1,2报数最后剩下的人的问题
- 傅里叶分析之掐死教程(完整版)
- 步步为营(十二)常用数据结构(5)STL-Set(集合)
- 乳腺增生可透过月经及早发现
- 学习设计模式——简单工厂
- shell学习五十一天----top命令查看进程列表
- 数字输入输出挂
- Jquery获取input输入值的方式总结。
- Windows下安装Java