zoukankan      html  css  js  c++  java
  • week8_1

    1.问题分析

    题目要求①输入n组数据,每组数据有十个②找出所有数据中优先级最高和最低的值③优先级定义:P(a)>P(b),a的质因子数目大于b,质因子数目相同,数值大的优先级高。

    先写一个Factor()函数用于查找数字的质因子个数,需要注意的是,质因子不包括数值本身,比如3的质因子个数是0,不是1。

    在主函数中,我用的是map<int,vector<int> >容器,键——质因子数目,值——对应的数字,vector没有排序功能,所以要自己排序。比较费劲的是,没办法直接对map容器里的vector进行删除,添加,排序的操作,只能用tem来暂存,然后完全覆盖,这样做效率比较低。不过代码量和用multiset容器几乎相同。

    2.解决方案

    ①Factor()函数,查找质因子数目

    ②主函数中先判断map中是否存在对应的值,不存在的话,需要先弄一个tem存进一个值,再插进去。存在的话,需要弄出值对应的数组,再插进数去。

    ③找出Map[begin]中的最小数,和Map[end-1]中的最大数。存在re[2]中,在数组中删除再放回Map容器。

    3.算法设计

    4.编程实现

    #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;
    }

    5.结果分析

    完美,O(∩_∩)O哈哈哈~

    6.总结体会

    万幸学校的测试数据不会上千,要不然这么奢侈的代码肯定超时了,O(∩_∩)O哈哈~。不过,抱有这种思想的我,估计这辈子最多是个码农了,阔怕……

  • 相关阅读:
    HDU_1068_Girls and Boys_二分图匹配
    Bringing Native Performance to Electron
    BIM开发引挈
    旷视科技 -- Face++ 世界最大的人脸识别技术平台
    freedownloadmanager 下载工具,代替 讯雷
    两种 AuthorizationSchemes 在 ASP.NET Core 2
    layout 的应用
    递归获取一个树层次结构(合同清单)的部分选择项(计量合同清单),以及递归删除部分清单
    Nest + typeorm
    http://nancyfx.org + ASPNETCORE
  • 原文地址:https://www.cnblogs.com/19991201xiao/p/8977167.html
Copyright © 2011-2022 走看看