题目
给定几个集合和几个查找,要求找出两个集合中重复元素所占比例(这里的比例指的是两相同元素个数 /集合合并后的总元素)
代码和思路
- 题目很直接的说了集合,那我们直接使用STL中的set
- 一个很简单的数学逻辑,集合1个数 + 集合2个数 - 合并个数 / 合并个数 就是题目要求的
- 注意输出的时候要输出一个百分号,两个连续的百分号就可以输出一个百分号,这个要记一下
- 最后要类型转换后再除,因为如果不类型转换,两个整数除得小于1最后答案一定是0。
#include<cstdio>
#include<set>
using namespace std;
const int maxn = 51;
set<int> st[maxn];
int main() {
int n;
int num;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%d", &num);
for (int j = 0; j < num; j++) {
int temp;
scanf("%d", &temp);
st[i].insert(temp);
}
}
int query, que1, que2;
scanf("%d", &query);
for (int i = 0; i < query; i++) {
set<int> temp;
int samenum;
scanf("%d %d", &que1, &que2);
set<int> ::iterator it;
for (it = st[que1].begin(); it != st[que1].end(); it++) {
temp.insert(*it);
}
it = st[que2].begin();
for (; it != st[que2].end(); it++) {
temp.insert(*it);
}
samenum = st[que1].size() + st[que2].size() - temp.size();
double ans;
ans = (double)samenum / (double)temp.size() * 100.0;
printf("%0.1f%%\n", ans);
}
}