Pat 1065单身狗(C++带讲解)

本题的难度不是很大,主要是麻烦在一些坑点

思路:

1.将夫妻/伴侣 以键值对的形式存储起来 如:map[11111]=22222;map[22222]=11111;

        好处是之后可以利用这键值对的关系进行查找

2.将参加聚会的所有人存入一个vector数组中,能排序和查找的都行

3.对参加的所以人进行判断

        逻辑如下:

                如果一个人如00001参加了,则利用map映射出他的对象Id,没有的情况为0。然后对  vector进行查找,判断此人是否出现在聚会中。之后将没有"对象"的人放同一个数组中并计数.

坑点:

00001会被输出为1所以要用printf输出

代码如下:

        

#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
int main(){
    map<int,int> m;
    int i,number=0,number1,number2;
    vector<int> v,res;
    cin>>i;
    while(i--){
        scanf("%d %d",&number1,&number2);
        m[number1]=number2;
        m[number2]=number1;
    }
    cin>>i;
    while(i--){
        int temp;
        scanf("%d",&temp);
        v.push_back(temp);
    }
    for(int a = 0;a<v.size();a++){
        if(find(v.begin(),v.end(),m[v[a]])==v.end()){//这里对vector进行了查找,如果利用map映射出来的"对象"不在vector中,则必定为单人
            res.push_back(v[a]);//单身队伍列
            number++;//计数单身人数
        }
    }
    sort(res.begin(),res.end());//排序
    cout<<number<<"\n";
    for(int a =0;a<res.size();a++){
        printf("%05d",res[a]);//这里不需要用&来取地址,因为是数组对象
        // cout<<res[a]这里会把00001打印为1
        if(a==res.size()-1){
            cout<<"\n";
        }else{
            cout<<" ";
        }
    }
    return 0;
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值