R7-5 分队列 分数 10 作者 翁恺 单位 浙江大学 班级第一次列队,通常老师会让同学按身高排成一列,然后1、2报数,喊到1的同学向前一步,就这样,队伍就变成两列了。假设现在一个班级有n个同学,并且他们已经按身高排成了一列,同学按身高从1到n编号,你能告诉我最后哪些编号的同学站在了第一列么? 输入格式: 输入一个正整数n,表示班级的人数。 输出格式: 按顺序输出所有在第一列的同学对应的编号,每两个编号之间用一个空格隔开。 输入样例: 11 输出样例: 1 3 5 7 9 11使用java代码实现
时间: 2023-05-31 15:04:57 浏览: 452
MOOC习题:程序设计入门——C语言-浙江大学-翁恺1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
boolean[] a = new boolean[n + 1]; // 标记每个同学是否在第一列
int cnt = 0; // 记录当前在第一列的同学个数
int cur = 1; // 当前喊的数字
while (cnt < n / 2) { // 当第一列的同学数达到n/2时停止喊数
for (int i = 1; i <= n; i++) {
if (!a[i]) { // 如果这个同学还没有被喊过
if (cur == 2) { // 如果喊到了2
a[i] = true; // 将这个同学标记为已经在第一列了
cnt++; // 第一列的同学数加1
if (cnt == n / 2) { // 如果第一列的同学数达到n/2,停止喊数
break;
}
}
cur = (cur == 1) ? 2 : 1; // 喊数轮流为1和2
}
}
}
for (int i = 1; i <= n; i++) {
if (a[i]) { // 输出在第一列的同学编号
System.out.print(i + " ");
}
}
}
}
阅读全文