{ }codelper
添加元素P0374

要补考的学生编号

n 名学生参加了小测验。
学生编号按分数给出的顺序依次为 1 号、2 号、…、n 号。
分数低于 c 分的学生要补考。
第一行给出 n 和 c,用一个空格隔开。
第二行给出 n 个分数,用一个空格隔开。
请在第一行输出要补考的学生人数。
请在第二行从小到大输出这些学生的编号,用一个空格隔开。
如果没有学生要补考,只在第一行输出 0,不输出第二行。

输入
1 ≤ n ≤ 100,0 ≤ c ≤ 100,0 ≤ 分数 ≤ 100(均为整数)
输出
第一行:要补考的学生人数;第二行:这些学生的编号(没有时只输出第一行)
样例 1 · stdin
5 60
70 45 60 59 90
stdout
2
2 4
样例 2 · stdin
3 50
50 80 100
stdout
0
main.py
输入(stdin)

运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。

$ 就绪

请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。

其他语言怎么写?查看各语言题解 · 8 种语言题解

人数要在编号之前输出,所以不能找到一个编号就马上输出,而要先一个一个收进空列表里。
往列表末尾放一个元素的名字各语言不同。
Python append,JS、TS push,Java ArrayList 的 add,C# List 的 Add,C++ vector 的 push_back,Craykon 添加。
C 的数组不会变长,所以解法先留出 100 个位置,再另外数已经用了几个。
陷阱一:把放入的结果再存回列表,就会丢掉列表。
Python retake = retake.append(…) 因为 append 返回 None,在放入例 1 的第二名学生时因 AttributeError 停止;JS retake = retake.push(…) 因为 push 返回新的长度,会因 retake.push is not a function 停止。
陷阱二:位置从 0 开始数,所以要放入 i + 1。
放入 i 的话,例 1 的第二行变成 1 3。
陷阱三:低于是 <。
写成 <= 的话,例 1 中正好 60 分的 3 号也会被算进去,得到 3 和 2 3 4。
陷阱四:放入的不是编号而是分数的话,例 1 的第二行变成 45 59。

Pythonmain.py · 9 行
n, c = map(int, input().split())scores = list(map(int, input().split()))retake = []                      # 빈 목록에서 시작한다for i in range(n):    if scores[i] < c:        retake.append(i + 1)     # 학생 번호는 1번부터print(len(retake))if retake:    print(*retake)
JavaScriptmain.js · 13 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");const [n, c] = lines[0].trim().split(/\s+/).map(Number);const scores = lines[1].trim().split(/\s+/).map(Number);const retake = []; // 빈 배열에서 시작한다for (let i = 0; i < n; i++) {  if (scores[i] < c) {    retake.push(i + 1); // 학생 번호는 1번부터  }}console.log(retake.length);if (retake.length > 0) {  console.log(retake.join(" "));}
TypeScriptmain.ts · 14 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const [n, c]: number[] = lines[0].trim().split(/\s+/).map(Number);const scores: number[] = lines[1].trim().split(/\s+/).map(Number);const retake: number[] = []; // 빈 배열에서 시작한다for (let i = 0; i < n; i++) {  if (scores[i] < c) {    retake.push(i + 1); // 학생 번호는 1번부터  }}console.log(retake.length);if (retake.length > 0) {  console.log(retake.join(" "));}
JavaMain.java · 26 行
import java.util.ArrayList;import java.util.List;import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt(), c = sc.nextInt();        List<Integer> retake = new ArrayList<>();   // 빈 목록에서 시작한다        for (int i = 0; i < n; i++) {            int score = sc.nextInt();            if (score < c) {                retake.add(i + 1);   // 학생 번호는 1번부터            }        }        System.out.println(retake.size());        if (!retake.isEmpty()) {            StringBuilder line = new StringBuilder();            for (int number : retake) {                if (line.length() > 0) line.append(' ');                line.append(number);            }            System.out.println(line);        }    }}
C#Main.cs · 25 行
using System;using System.Collections.Generic; class Program{    static void Main()    {        string[] head = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);        int n = int.Parse(head[0]), c = int.Parse(head[1]);        string[] parts = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries);        var retake = new List<int>();   // 빈 목록에서 시작한다        for (int i = 0; i < n; i++)        {            if (int.Parse(parts[i]) < c)            {                retake.Add(i + 1);   // 학생 번호는 1번부터            }        }        Console.WriteLine(retake.Count);        if (retake.Count > 0)        {            Console.WriteLine(string.Join(" ", retake));        }    }}
C++main.cpp · 23 行
#include <iostream>#include <vector> int main() {    int n, c;    std::cin >> n >> c;    std::vector<int> retake;   // 빈 vector에서 시작한다    for (int i = 0; i < n; i++) {        int score;        std::cin >> score;        if (score < c) {            retake.push_back(i + 1);   // 학생 번호는 1번부터        }    }    std::cout << retake.size() << "\n";    if (!retake.empty()) {        for (std::size_t k = 0; k < retake.size(); k++) {            if (k > 0) std::cout << " ";            std::cout << retake[k];        }        std::cout << "\n";    }}
Cmain.c · 26 行
#include <stdio.h> int main(void) {    int n, c;    if (scanf("%d %d", &n, &c) != 2) return 0;    /* C의 배열은 늘어나지 않는다: 가장 많을 때(100명)만큼 잡아 두고, 몇 칸 찼는지 따로 센다 */    int retake[100];    int count = 0;    for (int i = 0; i < n; i++) {        int score;        if (scanf("%d", &score) != 1) return 0;        if (score < c) {            retake[count] = i + 1;   /* 학생 번호는 1번부터 */            count++;        }    }    printf("%d\n", count);    if (count > 0) {        for (int k = 0; k < count; k++) {            if (k > 0) printf(" ");            printf("%d", retake[k]);        }        printf("\n");    }    return 0;}
Craykonmain.cray · 17 行
head = 控制台.读数字();n = head[0];c = head[1];scores = 控制台.读数字();retake = []; // 빈 목록에서 시작한다循环 (i = 0; i < n; i++){    如果 (scores[i] < c)    {        retake.添加(i + 1); // 학생 번호는 1번부터    }}控制台.输出(retake.数量);如果 (retake.数量 > 0){    控制台.输出(retake); // 목록은 빈칸으로 이어서 쓴다}