PTA帥到沒朋友,天梯模擬賽
阿新 • • 發佈:2019-01-01
11 帥到沒朋友 (20分)
當芸芸眾生忙著在朋友圈中發照片的時候,總有一些人因為太帥而沒有朋友。本題就要求你找出那些帥到沒有朋友的人。
輸入格式:
輸入第一行給出一個正整數N
(≤100),是已知朋友圈的個數;隨後N
行,每行首先給出一個正整數K
(≤1000),為朋友圈中的人數,然後列出一個朋友圈內的所有人——為方便起見,每人對應一個ID號,為5位數字(從00000到99999),ID間以空格分隔;之後給出一個正整數M
(≤10000),為待查詢的人數;隨後一行中列出M
個待查詢的ID,以空格分隔。
注意:沒有朋友的人可以是根本沒安裝“朋友圈”,也可以是隻有自己一個人在朋友圈的人。雖然有個別自戀狂會自己把自己反覆加進朋友圈,但題目保證所有K
輸出格式:
按輸入的順序輸出那些帥到沒朋友的人。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<stdio.h> #include <string.h> int f[199999]; int main() { int n, m, i, j = 0, x, y; scanf("%d", &n); memset(f, 0, sizeof(f));//初始0/ while(n--) { scanf("%d", &m); if(m > 1)//判斷朋友圈人數是否大於一,大於一存起來/ { for(i = 0;i < m;i++) { scanf("%d", &x); f[x]++; } } else scanf("%d", &x); } scanf("%d", &m); while(m--) { scanf("%d", &y); if(!f[y]) { if(!j) { printf("%05d", y);//注意根據題意必須是5位/ f[y]++; j++; } else { printf(" %05d", y); f[y]++; } } } if(!j) printf("No one is handsome"); printf("\n"); return 0; }
方法二:
這是我比賽的程式碼,當時資料沒有全過,後來改了一下,我也沒有注意到必需是5位。這個方法的話,主要是用二維陣列進行儲存,每行的第一項要存這一行的項數。
#include <stdio.h>
int f[111][1111];
int main()
{
int n, m, i, j, k, x, sum[111], y = 0;
scanf("%d", &n);
for(i = 0;i < n;i++)
{
scanf("%d", &m);
f[i][0] = m;
for(j = 1;j <= m;j++)
{
scanf("%d", &f[i][j]);
}
}
scanf("%d", &k);
while(k--)
{
scanf("%d", &x);
int flag = 1;
for(i = 0;i < n;i++)
{
m = f[i][0];
for(j = 1;j <= m;j++)
{
if(x == f[i][j]&&m > 1)
{
flag = 0;
break;
}
}
}
if(flag)
{
int c = 1;
for(i = 0;i < y;i++)
{
if(x == sum[i])
{
c = 0;
break;
}
}
if(c)
sum[y++] = x;
}
}
if(y)
{
for(i = 0;i < y;i++)
{
if(i == y - 1)
printf("%05d\n", sum[i]);
else
printf("%05d ", sum[i]);
}
}
else
printf("No one is handsome\n");
return 0;
}