{ }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) ? "はい" : "いいえ");}