题目:
集合中元素是互异的,输入一系列整数作为一个集合中的元素,计算集合中元素的个数。
输入格式:
第一行是一个整数N(0≤N≤10 5 ,接下来有N行,每行一个整数(范围[−10 5 ,105 ]),表示集合中的元素。
输出格式:
一个整数,表示集合中元素的个数。
输入样例:
4
2
2
1
3
输出样例:
3
题解:
首先,题目说的很明确,集合中的元素是互异的,也就是说,没有相同的元素。比如1 1 1 1 2,输入了5个数但是实际上集合的元素数目是2。
那么,什么样子的数据结构才有这样的性质呢,我们可以用一个二叉搜索树。。。
在C++的STL里面有个叫做set的模板,python里也有个set,Java里有个HashSet的泛型,这都是已经实现好的集合,直接拿来用就可以了。
当然,这个集合是个有序集合。
没啥好说的,直接上代码吧
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);
}
//输出集合大小
cout << ans.size();
return 0;
}
Python版:
n = int(input())
ans = set()
while n:
ans.add(int(input()))
n -= 1
print(len(ans))
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--;
}
System.out.println(ans.size());
in.close();
}
}