问题描述:找出输入数据中所有两两相乘为12!的对数,每个数字只能配对一次。
核心思想:首先排除不是12!的因子,在set中查找与输入数据n相配对的数,若没有找到,把n放入set中,若找到删除set中与n配对的数,计数sum++;
注意:set中的元素不可重复,但multiset中元素可重复。s.find(x),找到返回指向x的指针,没找到返回s.end(),s.end()为set的最后一个元素后的一个位置。
#include<iostream>
#include<set>
using namespace std;
int compute(){
int sum=1;
for(int i=1;i<=12;i++){
sum*=i;
}
return sum;
}//求12!的值
int main(){
multiset<int> s;//元素可重复
set<int>::iterator it;
int n,sum=0;
while(cin>>n){
if(compute()%n==0){//n为12!的因子,进行查找
it=s.find(compute()/n);//找n的配对数
if(it!=s.end()){//找到配对的,进行删除,没找到放入s
sum++;
s.erase(it);
}
else
s.insert(n);
}
}
cout<<sum<<endl;
}