需求

同学们相约一起游玩,大家准备推举一个人作为临时队长。为了体现合理公平,大家提出了一个规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),凡报到 3 的人退出,剩下的人继续报数,最后留下的当选为队长。求出一组人中的队长是原来第几位同学。

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("请输入总人数");

int num = sc.nextInt();

int[] mates = new int[num];

//报数变量

int baoshu=0;

//退出人数

int exitNum = 0;

while(exitNum < num-1){

for (int i = 0 ; i

//0代表没退出,因为初始化为0

if (mates[i] == 0){

baoshu++;

if(baoshu == 3){

//-1代表退出

mates[i] = -1;

baoshu = 0;

exitNum++;

}

}

}

}

//寻找不为-1的下标

for (int i = 0 ; i

if (mates[i] == 0){

System.out.println("第"+ (i+1) + "号同学是队长");

}

}

}

整体思路是用一个数组代表全班同学,因为数组初始化为0,所以0代表还没有被淘汰的同学,设置-1为淘汰的同学。 使用一个while循环,循环条件是只剩下一位同学的时候停止循环。 循环报数,baoshu变量自加,到三则归零,报到3的同学被淘汰,设置为-1 如此循环,直到程序结束。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐