package Demo37Circle_Man;
import java.util.Arrays;
import java.util.Scanner;
/**
* 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
*/
/*
分析:n是由用户输入的,用户输入后,每个人都有自己的号码,把这些号码装到一个数组中
遍历这个数组,依次编号,如果报到3的人,将对应的值设为0,表示他退出了,
一直遍历,直到最后剩下的人报不到3为止,输出他们的编号。
*/
public class Circle_Man {
public static void main(String[] args) {
// 让用户输入有几个人
Scanner sc = new Scanner(System.in);
System.out.println("请您输入总共有多少个人啊?");
int n = sc.nextInt();
// 将每个人的编号存到数组中
int[] coll = new int[n];
for (int i = 0; i < coll.length; i++) {
coll[i]=(i+1);
}
// 定义一个号,用来被叫的,flag
int flag = 0;
// 定义一个标签,标记程序啥时候结束的
boolean index =true;
// 一直循环,一直循环,直到剩下的人实在叫不到3了为止
while(index==true){
//轮一遍,叫到3的人退出
for (int i = 0; i < coll.length; i++) {
index=false;
// 值已经为0的不再叫好,他们已经滚蛋了
if(coll[i]==0){
continue;
}else{
flag++;
if(flag==3){
System.out.println("编号为"+(i+1)+"的人退出");
coll[i]=0;
index = true;
flag=0;
}
}
}
// 轮过一轮之后,查看剩下几个人,少于3个则结束
int per=0;
// 检查结果,看还有号的有几个
for (int i = 0; i < coll.length; i++) {
if(coll[i]!=0){
per++;
}
}
// 剩下的人数如果大于1,则表明还能再叫一轮,index设为true,继续搞
if(per!=1){
index=true;
}
}
// 打印结果
System.out.print("经过好多轮的叫号,最后剩下的人的原编号是:");
for (int i : coll) {
if(i!=0){
System.out.print(i+"号 ");
}
}
}
}
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 首先,我最大的学习来源不是百度而是我群友~~在这里表白一波我热爱学习的群友们!然后今天群里突然有人提出了题目的这个...
- 1.问题:n个人围成一圈,顺序排号,从第1个人开始报数(1到3报数),凡报到3的人退出圈子,问最后留下的是原来几号...