考虑到同一组元素中可能有相同的值,需要进行过滤,因此选用更为方便的 set(点击可以查看使用方法)。
代码(算法笔记优化):
#include<stdio.h>
#include<set>
using namespace std;
const int N = 51;
set<int> num[N];
void cmp(int x,int y){
int totalnum = num[y].size(),samnum = 0;
for(set<int>::iterator it = num[x].begin();it != num[x].end();it ++){
if(num[y].find(* it) != num[y].end()) samnum++;
else totalnum++;
}
double p = (double) samnum * 100 / (double)totalnum;
printf("%.1f%%\n",p); //注意此处的输出格式!
}
int main(){
int n,k,count,temp;
scanf("%d",&n);
for(int i = 0;i < n;i++){
scanf("%d",&count);
for(int j = 0;j < count;j++){
scanf("%d",&temp);
num[i].insert(temp);
}
}
scanf("%d",&k);
int cmp1[k];
int cmp2[k];
for(int i = 0;i < k;i++){
scanf("%d%d",&cmp1[i],&cmp2[i]);
}
for(int i = 0;i < k;i++){
cmp(cmp1[i] -1 ,cmp2[i] - 1);
}
return 0;
}