离散数学 习题篇 —— 元素与集合的关系

题目:

给一系列整数输入作为集合A的元素,再给若干个整数x,问是否有x∈A。

输入格式:

4行。

第一行是一个整数N(1≤N≤10​5),接下来一行有N个整数(范围[−10​5​,10​5​​],空格分开),表示集合A中的元素;

第三行是一个整数M(1≤M≤10​4​),接下来一行有M个整数(范围[−105,105],空格分开),表示要查询的元素x。

输出格式:

M行,若x∈A,输出Yes;若x∉A,输出No。

输入样例:

4
2 2 1 3
3
3 1 0

输出样例:

Yes
Yes
No

题解:
其实只是单纯的判断元素是不是在集合里面,那么用纯C的话,写一个排序和二分查找应该也能过,暴力遍历也能过一些吧
那么还是用实现好的set
C++的set有个find方法,如果找到就返回该值的迭代器(类似于指针)如果没有就返回end()
python直接用in关键字就行了
Java的HashSet里有个contains方法,返回是否找到该值。

C++代码:

#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
    set<int> ans;
    int n;
    cin >> n;
    while (n--)
    {
        int a;
        cin >> a;
        ans.insert(a);
    }
    cin >> n;
    while(n--)
    {
        int a;
        cin >> a;
        if(ans.find(a) != ans.end())
            cout << "Yes\n";
        else
            cout << "No\n";
        
    }
    return 0;
}

Python版:

n = int(input())
Set = set(map(int, input().split()))
n = int(input())
ans = map(int, input().split())
for i in ans:
    if i in Set:
        print("Yes")
    else:
        print("No")

Java版

import java.util.HashSet;
import java.util.Scanner;

/**
 * Main
 */
public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        HashSet<Integer> ans = new HashSet<>();
        int n = in.nextInt();
        while(n > 0)
        {
            int e = in.nextInt();
            ans.add(e);
            n--;
        }
        int m = in.nextInt();
        while(m > 0)
        {
            m--;
            int a = in.nextInt();
            if(ans.contains(a))
                System.out.println("Yes");
            else
                System.out.println("No");
        }
        
        in.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值