pta L1-020 帅到没朋友

题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805117167976448

评价:不太好做;

首先,题目上来给的概念就很模糊,但是仔细一看,对于找重合和排序问题的话,集合是最拿手的,所以我们用集合来处理这道题

其次,就是模拟了;

题目的思路:

没有朋友圈或者朋友圈只有他自己,而且输入保证了人数大于1时是两个不同的人,所以朋友圈人数大于1的人就是有朋友的人或者说NOHANDSOME的人,这样我们就直接把这些人存入no_handsome中即可。注意:朋友圈人数等于1时仍然要把这一个人接收下来只是不存入no_handsome里。 然后就检查输入中有谁没有在no_handsome里面则就是帅到没朋友的人就输出,每次也要把帅到没朋友的人存入handsome组织起来,每次输出前要检查是否输出过。如果handsome里面没人那就输出就好了。

还有几个易错点,就是对于%05d的把握和输出空格的技巧,这里采用bool数来判断,第一个输出前是true不输出了,其余的都输出即可

Talk is cheap. Show me the code.

#include<bits/stdc++.h>
using namespace std;
bool flag=true;
int n;
int m;
int main()
{    
    cin>>n;    
    set<int> no_handsome;  //集合的特点就是不重复并且是排好序的  
    for(int i=1;i<=n;i++)    
    {        
        int k;        
        cin>>k;        
        for(int j=1;j<=k;j++)        
        {            
            int temp;            
            cin>>temp;            
            if(k>1)//保证两个不同的人      
            {                
                no_handsome.insert(temp);            
            }           
        }    
    }     
    cin>>m;     
    set<int> handsome;       
    for(int i=1;i<=m;i++)    
    {        
        int temp;        
        cin>>temp;        
        if(no_handsome.find(temp)==no_handsome.end())        
        {            
            if(handsome.find(temp)==handsome.end())//每次输出前要检查是否已经输出过了.      
            {                
                if(!flag)   //控制输出空格             
                {                    
                    cout<<" ";                
                }                
                printf("%05d",temp);                
                flag=false;            
            }            
            handsome.insert(temp);        
        }    
    }    
    if(handsome.size()==0)    
    {        
        cout<<"No one is handsome";    
    }
} 

 

posted @ 2022-04-16 20:31  江上舟摇  阅读(92)  评论(0编辑  收藏  举报