美文网首页
PAT A 1120 1121 1122 1123

PAT A 1120 1121 1122 1123

作者: 大美mixer | 来源:发表于2018-12-01 17:18 被阅读0次

    1120 STL

    题目大意: 若两个数的数位上的数字加起来相等,则为朋友数。 例如:1+2+3 = 5+1 = 6,因此123和51是朋友数。给你一些数字,计算不同朋友数的值。
    思路: 只需要计算不同朋友数的值,因此每次先计算一下值,然后插入set就好啦。

    #include<iostream>
    #include<set>
    using namespace std;
    
    //计算数位和 
    int count(int x){
        int sum = 0;
        while( x!=0 ){
            sum += x%10;
            x = x/10;
        } 
        return sum;
    }
    
    int main(){
        int n;
        cin>>n;
        set<int> s;
        for(int i=0;i<n;i++){
            int x;
            cin>>x;
            s.insert(count(x));
        } 
        cout<<s.size()<<endl;
        set<int>::iterator iter;
        for(iter = s.begin(); iter != s.end(); iter++){
            if(iter != s.begin()){
                cout<<" ";
            }
            cout<<*iter;
        }
        return 0;
    } 
    

    1121 STL

    be rounded to 四舍五入
    题目大意: 给出所有情侣和参加派对的人,找出参加派对的人哪些是单身(情侣必须两个人都到才可以) 。
    思路: 考录到用int会把0和00000混淆,所以还是用string吧 。对于每个输入的树,若这个人没有情侣,则一定单身。若这个人有情侣,则存入set中,再查找他的情侣是否也来了。

    #include<iostream>
    #include<vector>
    #include<algorithm> 
    #include<map>
    #include<set>
    #include<string> 
    using namespace std;
    int main(){
        int n; //n<=50000,情侣总数
        cin>>n;
        map<string ,string> coupleList;
        for(int i=0;i<n;i++){
            string a,b;
            cin>>a>>b;
            coupleList[a] = b;
            coupleList[b] = a;
        } 
        int m; //<=10000,参加派对的人数
        cin>>m; 
        set<string> option;
        vector<string> ans; 
        for(int i=0;i<m;i++){
            string x;
            cin>>x;
            if(coupleList[x] == ""){//若不存在 
                ans.push_back(x);
            }else{
                option.insert(x);
            }
        } 
        set<string>::iterator iter;
        for(iter = option.begin(); iter != option.end(); iter++){
            if(option.find(coupleList[*iter]) == option.end()){//若找不到 
                ans.push_back(*iter);
            }
        }
        sort(ans.begin(), ans.end());
        cout<<ans.size()<<endl;
        for(int i=0;i<ans.size();i++){
            if( i != 0){
                cout<<" ";
            }
            cout<<ans[i];
        }
        return 0;
    }
    

    1122 哈密顿图

    题目大意: 哈密顿圈 :经过图中所有的节点的圈 。给出一个无向图,判断给的圈是否是哈密顿圈。
    思路: 要判断几个点:

    • 是否是N+1个点。
    • 结点编号是否在范围内
    • 除起点外,每个点是否只出现了1次
    • 经过的边是否存在
    • 起点是否等于终点
    #include<iostream>
    #include<map>
    using namespace std;
    int main(){
        int n, m;
        cin>>n>>m;
        int e[205][205];
        for(int i=0;i<m;i++){
            int a,b;
            cin>>a>>b;
            e[a][b] = e[b][a] = 1;
        }
        int k;
        cin>>k;
        for(int i=0;i<k;i++){
            int q;
            cin>>q;
            bool flag = true;
            if(q != n+1) flag = false; //每个都遍历一遍最终回到重点只能是N+1个点 
            int sst;
            cin>>sst;
            map<int ,int> mp;
            int st,en;
            st = sst;
            for(int j=1;j<q;j++){
                cin>>en;
                if(en < 1 || en >n) flag = false; //结点编号不在范围内 
                mp[en]++;
                if(mp[en]>1) flag = false;  //初起点外,每个点有且只能出现一次 
                if(e[st][en] == 0) flag = false; //若这条边不存在 
                st = en;
            }
            if(en != sst) flag = false; //若起点不等于终点
            flag ? cout<<"YES"<<endl : cout<<"NO"<<endl ;
        } 
        return 0;
    } 
    
    

    1123 AVL树 层次遍历

    题目大意: 按照插入顺序输入数字,输出AVL树的层次遍历,并说明他是不是一个完全二叉树.
    再见。

    相关文章

      网友评论

          本文标题:PAT A 1120 1121 1122 1123

          本文链接:https://www.haomeiwen.com/subject/frsrcqtx.html