PAT A 1120 1121 1122 1123

1120 STL

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

#include
#include
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 s;
    for(int i=0;i>x;
        s.insert(count(x));
    } 
    cout<::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
#include
#include 
#include
#include
#include 
using namespace std;
int main(){
    int n; //n<=50000,情侣总数
    cin>>n;
    map coupleList;
    for(int i=0;i>a>>b;
        coupleList[a] = b;
        coupleList[b] = a;
    } 
    int m; //<=10000,参加派对的人数
    cin>>m; 
    set option;
    vector ans; 
    for(int i=0;i>x;
        if(coupleList[x] == ""){//若不存在 
            ans.push_back(x);
        }else{
            option.insert(x);
        }
    } 
    set::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<

1122 哈密顿图

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

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

1123 AVL树 层次遍历

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

你可能感兴趣的:(PAT A 1120 1121 1122 1123)