当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。
输入第一行给出一个正整数N(\le 100≤100),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K(\le 1000≤1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(\le 10000≤10000),为待查询的人数;随后一行中列出M个待查询的ID,以空格分隔。
注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有K超过1的朋友圈里都至少有2个不同的人。
按输入的顺序输出那些帅到没朋友的人。ID间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出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("d", y);//注意根据题意必须是5位/ f[y]++; j++; } else { printf(" d", 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("d\n", sum[i]); else printf("d ", sum[i]); } } else printf("No one is handsome\n"); return 0; }