{ }codelper
列表包含P0059

在名单里吗

第一行给出名单大小 n,第二行给出 n 个整数(名单),第三行给出询问数 q,第四行给出 q 个整数。
对每个询问的数,如果在名单里输出 "是",否则输出 "否",每行一个。
名单中同一个数可能出现多次。

输入
1 ≤ n ≤ 1,000,1 ≤ q ≤ 1,000,所有数都是 -1,000,000,000 到 1,000,000,000 之间的整数
输出
q 行,每行 "是" 或 "否"
样例 1 · stdin
3
10 20 300
4
20 1 300 30
stdout
是
否
是
否
main.py
输入(stdin)

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

$ 就绪

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

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

判断是否在列表中的工具:Python x in a,JavaScript、TypeScript a.includes(x),C# a.Contains(x)(数组需要 using System.Linq),C++ std::find(a.begin(), a.end(), x) != a.end()(C++23 有 std::ranges::contains),Java 数组用 Arrays.stream(a).anyMatch(v -> v == x),C 写一个循环函数。
Craykon 是 a.包含(x)。
三个陷阱:① 把数字当字符串查找会匹配到片段:在行 "10 20 300" 里查 "1"、"30" 都会显示存在。
② Java 的 Arrays.asList(a).contains(x) 在 a 是 int[] 时得到的是 List<int[]>(只装一个数组的列表),所以永远是 false,而且能通过编译。
③ 在循环里写 else return 0 会只看第一个就判定“没有”。
“没有”只能在全部看完之后才能说。
这些工具都是从前往后逐个查看,每次询问最多看 n 个;询问非常多时用集合,如 Python set、Java HashSet。

Pythonmain.py · 5 行
n = int(input())a = list(map(int, input().split()))q = int(input())for x in map(int, input().split()):    print("是" if x in a else "否")
JavaScriptmain.js · 5 行
const nums = require("fs").readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const n = nums[0];const a = nums.slice(1, 1 + n);const queries = nums.slice(2 + n);console.log(queries.map((x) => (a.includes(x) ? "是" : "否")).join("\n"));
TypeScriptmain.ts · 6 行
import { readFileSync } from "node:fs";const nums: number[] = readFileSync(0, "utf8").trim().split(/\s+/).map(Number);const n: number = nums[0];const a: number[] = nums.slice(1, 1 + n);const queries: number[] = nums.slice(2 + n);console.log(queries.map((x) => (a.includes(x) ? "是" : "否")).join("\n"));
JavaMain.java · 19 行
import java.util.Arrays;import java.util.Scanner; public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        int[] a = new int[n];        for (int i = 0; i < n; i++) a[i] = sc.nextInt();        int q = sc.nextInt();        StringBuilder out = new StringBuilder();        for (int k = 0; k < q; k++) {            int x = sc.nextInt();            boolean found = Arrays.stream(a).anyMatch(v -> v == x);            out.append(found ? "是" : "否").append('\n');        }        System.out.print(out);    }}
C#Main.cs · 17 行
using System;using System.Linq; class Program{    static void Main()    {        Console.ReadLine();        int[] a = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToArray();        Console.ReadLine();        foreach (string s in Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries))        {            int x = int.Parse(s);            Console.WriteLine(a.Contains(x) ? "是" : "否");        }    }}
C++main.cpp · 16 行
#include <algorithm>#include <iostream>#include <vector> int main() {    int n, q, x;    std::cin >> n;    std::vector<int> a(n);    for (int& v : a) std::cin >> v;    std::cin >> q;    for (int k = 0; k < q; k++) {        std::cin >> x;        bool found = std::find(a.begin(), a.end(), x) != a.end();        std::cout << (found ? "是" : "否") << "\n";    }}
Cmain.c · 19 行
#include <stdio.h> int contains(const int *a, int n, int x) {    for (int i = 0; i < n; i++)        if (a[i] == x) return 1;    return 0;} int main(void) {    int n, q, x, a[1000];    scanf("%d", &n);    for (int i = 0; i < n; i++) scanf("%d", &a[i]);    scanf("%d", &q);    for (int k = 0; k < q; k++) {        scanf("%d", &x);        puts(contains(a, n, x) ? "是" : "否");    }    return 0;}
Craykonmain.cray · 7 行
n = 控制台.读行().转数字();a = 控制台.读数字();q = 控制台.读行().转数字();遍历 (x 在 控制台.读数字()){    控制台.输出(a.包含(x) ? "是" : "否");}