循环报数java代码_[编程入门]报数问题-题解(Java代码)

解题思路:

注意事项:

参考代码:import java.util.Scanner;

/**

* https://www.dotcpp.com/oj/problem1047.html

* @author yang

*

*【报数问题】 有n人围成一圈,顺序排号。

* 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

*/

public class Seq1047 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();

// 定义数组存储是否报过数,报过数将值改为1

int[] person = new int[n];

// 开始报数游戏,每退出一个人n-1,直到剩最后一个人结束循环

int num = 0;

for(int i = 0; ; i++){

//  如果当前这个人的值还是0.说明还在参与游戏

if(person[i]==0){

num++;

}

// 报3的时候做的处理

if(num==3){

person[i] = 1; // 报3的数组值改为1

num=0;   // 重新从0计数

n--;     // 参与游戏的人数-1

}

// 只剩一个人结束循环

if(n==1){

break;

}

//  循环执行到最后,重新回到第一个

if(i==person.length-1){

i=-1;  // 注意:这里有坑,最初我设置的是i=0,然后for循环会再次执行i++,这样会跳过去一个人

}

}

// 输出优胜者

for(int i = 0; i

if(person[i]==0){

System.out.println(i+1);

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值