博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有 n个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 问最后留下的是原来第几号的那位...
阅读量:4959 次
发布时间:2019-06-12

本文共 1371 字,大约阅读时间需要 4 分钟。

题目:有 n个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 问最后留下的是原来第几号的那位。

分析:
1.圈子人有序号,并且可以循环报数,用数组来存放。
2.圈子人的状态有两种情况,用1和0表示
3.循环报数遇到3就退出,那么最后只会剩下一个人—>这个便是循环条件
4.设置一个计数器,每次有人报数计数器就加1,当计数器加到3时,这个人退出并将这个人状态标记为0


package com.math.forth;import java.util.Scanner;/*** * 题目:有 n个人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出圈子, 问最后留下的是原来第几号的那位。 * 分析:1.圈子人有序号,并且可以循环报数,用数组来存放。 * 2.圈子人的状态有两种情况,用1和0表示 * 3.循环报数遇到3就退出,那么最后只会剩下一个人--->这个便是循环条件 * 4.设置一个计数器,每次有人报数计数器就加1,当计数器加到3时,这个人退出并将这个人状态标记为0 * @author wql * */public class Math16 {
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入数字个数:"); int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i
1){ if(arr[i]==1){ count++; } if(count==3){ arr[i]=0;//遇到数3的人了,退出圈子,标识立马变为0 x--; //标记为1的人数少一个 count=0;//计数器归零,重新计数 } if(i==arr.length-1){ i=-1; } i++;//让人动起来 } }}

运行图


这个题目就是一个约瑟夫环问题,以前做过,但今天看到这个面试题依旧想了好久…想吃xiang的郁闷

约瑟夫环很经典参考:

转载于:https://www.cnblogs.com/wangqilong/p/8279764.html

你可能感兴趣的文章
前端学习☞jquery
查看>>
10分钟搞懂树状数组
查看>>
Spring Cloud与微服务构建:微服务简介
查看>>
HTTP缓存和CDN缓存
查看>>
HDU-1171 Big Event in HDU(生成函数/背包dp)
查看>>
Babel 是干什么的
查看>>
cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法
查看>>
Mysql数据库乱码总结
查看>>
BZOJ.3160.万径人踪灭(FFT Manacher)
查看>>
CODE[VS] 1842 递归第一次
查看>>
20180418小测
查看>>
Spring Cloud是怎么运行的?
查看>>
12 联结表
查看>>
数字三角形
查看>>
NGUI 减少drawcall规则
查看>>
三元表达,匿名函数
查看>>
前端笔记-基础笔记
查看>>
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>