PTA_L1-020 帥到沒朋友 (20分)

L1-020 帥到沒朋友

當芸芸衆生忙着在朋友圈中發照片的時候,總有一些人因爲太帥而沒有朋友。本題就要求你找出那些帥到沒有朋友的人。
輸入格式:
輸入第一行給出一個正整數N(≤100),是已知朋友圈的個數;隨後N行,每行首先給出一個正整數K(≤1000),爲朋友圈中的人數,然後列出一個朋友圈內的所有人——爲方便起見,每人對應一個ID號,爲5位數字(從00000到99999),ID間以空格分隔;之後給出一個正整數M(≤10000),爲待查詢的人數;隨後一行中列出M個待查詢的ID,以空格分隔。

注意:沒有朋友的人可以是根本沒安裝“朋友圈”,也可以是隻有自己一個人在朋友圈的人。雖然有個別自戀狂會自己把自己反覆加進朋友圈,但題目保證所有K超過1的朋友圈裏都至少有2個不同的人。
輸出格式:
按輸入的順序輸出那些帥到沒朋友的人。ID間用1個空格分隔,行的首尾不得有多餘空格。如果沒有人太帥,則輸出No one is handsome。
注意:同一個人可以被查詢多次,但只輸出一次。

輸入樣例1:

3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888

輸出樣例1:

10000 88888 23333

輸入樣例2:

3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111

輸出樣例2:

No one is handsome

完整代碼:

#include<iostream>
#include<cstdio>
using namespace std;
int a[100010];
int main()
{
    int n,x;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int k;
        cin>>k;
        for(int j=0;j<k;j++)
        {
            cin>>x;
            if(k>1)             //如果不是隻有自己
            {
                a[x]++;
            }
        }
    }
    int m,flag=0;
    cin>>m;
    for(int i=0;i<m;i++)
    {
        cin>>x;
        if(a[x]==0)
        {
            a[x]=1;                 //不輸出重複的
            if(flag==0)
            {
                printf("%05d",x);   //是一個五位數,輸入的時候可能有前導零,所以輸出的時候補齊前導零
            }
            else
            {
                printf(" %05d",x);
            }
            flag=1;
        }
    }
    if(flag==0)
        cout<<"No one is handsome"<<endl;
    else
        printf("\n");
    return 0;
}

原題鏈接:
https://pintia.cn/problem-sets/994805046380707840/problems/994805117167976448


小記錄:
(不用在意這些)

/*這個是錯誤的,上面的那個是正確的。*/
/**
    前兩個樣例是對的,後面三個是錯的。
    後來我發現我讀錯題了。
    開始我理解的是,輸入n組,每組k個元素,然後再輸m個元素,
    輸出m個元素中和n*k不同的元素
    後來看了別人的才知道理解錯了,不能光看樣例不好好讀題。
    (因爲我覺得我的思路我覺得很好,所以我將這個代碼保留了下來。紀念一下我當時的思路。)
*/
#include<bits/stdc++.h>
using namespace std;
int a[1010];
int b[10010];
int c[100010];
int d[10010];
int main()
{
    int n;
    cin>>n;
    int x=0;
    for(int i=0;i<n;i++)
    {
        int k;
        cin>>k;
        for(int j=0;j<k;j++)
        {
            cin>>a[j];
            c[x++]=a[j];            //所有的數字拿數組c存起來
        }
    }
    int m;
    cin>>m;
    for(int i=0;i<m;i++)
    {
        cin>>b[i];
    }
    sort(c,c+x);                //數組c中的元素排序
    int y=unique(c,c+x)-c;      //數組c中的元素去重
    int z=0;
    for(int i=0;i<m;i++)        //然後和b中的比較,如果相同就把b中的元素改爲1,並且z計數器記錄了有幾個相同元素
    {
        for(int j=0;j<y;j++)
        {
            if(b[i]==c[j])
            {
                b[i]=0;
                z++;
                break;
            }
        }
    }
    //去掉b中的重複元素
    int w=0;
    int q;
    for(int i=0;i<m;i++)
    {
        for(q=0;q<w;q++)
        {
            if(b[i]==d[q])
            {
                break;
            }
        }
        if(q==w)
        {
            d[w]=b[i];
            w++;
        }
    }
    if(z==m)
    {
        cout<<"No one is handsome"<<endl;
    }
    else
    {
        for(int i=0;i<w;i++)
        {
            if(d[i]!=0)             //輸出d中不爲0的數字(最後一位可能是0)
            {
                if(i!=w-1)          //由於是個五位數,輸出時記得前面補前導零
                {
                    printf("%05d ",d[i]);
                }
                else
                    printf("%05d\n",d[i]);
            }
        }
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章