标签:iterator 大数 count png 测试 哈哈哈 img 直接 pre
题目要求①输入n组数据,每组数据有十个②找出所有数据中优先级最高和最低的值③优先级定义:P(a)>P(b),a的质因子数目大于b,质因子数目相同,数值大的优先级高。
先写一个Factor()函数用于查找数字的质因子个数,需要注意的是,质因子不包括数值本身,比如3的质因子个数是0,不是1。
在主函数中,我用的是map<int,vector<int> >容器,键——质因子数目,值——对应的数字,vector没有排序功能,所以要自己排序。比较费劲的是,没办法直接对map容器里的vector进行删除,添加,排序的操作,只能用tem来暂存,然后完全覆盖,这样做效率比较低。不过代码量和用multiset容器几乎相同。
①Factor()函数,查找质因子数目
②主函数中先判断map中是否存在对应的值,不存在的话,需要先弄一个tem存进一个值,再插进去。存在的话,需要弄出值对应的数组,再插进数去。
③找出Map[begin]中的最小数,和Map[end-1]中的最大数。存在re[2]中,在数组中删除再放回Map容器。
#include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; int Factor(int num) { int i=2,re=0,tem=0; int n=num; while(n>=i) { if(n%i==0) { tem=i; re++; n/=i; while(n%i==0) n/=i; } else i++; } if(tem==num)re--; return re; } int main() { int num,count,factor,n,re[2]; map<int,vector<int> > Map; map<int,vector<int> >::iterator it; cin>>num; while(num--) { count=10; while(count--) { cin>>n; factor=Factor(n); it=Map.find(factor); if(it==Map.end()) { vector<int> tem; tem.push_back(n); Map[factor]=tem; } else { vector<int> tem; tem=it->second; tem.push_back(n); sort(tem.begin(),tem.end()); Map[factor]=tem; } } vector<int>tem; it=Map.begin(); tem=it->second; re[0]=tem[0]; tem.erase(tem.begin()); Map[0]=tem; it=Map.end(); it--; n=it->first; tem=it->second; int len=tem.size()-1; re[1]=tem[len]; tem.pop_back(); Map[n]=tem; cout<<re[1]<<" "<<re[0]<<endl; } return 0; }
完美,O(∩_∩)O哈哈哈~
万幸学校的测试数据不会上千,要不然这么奢侈的代码肯定超时了,O(∩_∩)O哈哈~。不过,抱有这种思想的我,估计这辈子最多是个码农了,阔怕……
标签:iterator 大数 count png 测试 哈哈哈 img 直接 pre
原文地址:https://www.cnblogs.com/19991201xiao/p/8977167.html