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<stdio.h>
using namespace std;


 int main() {
     int n,m,p,a[100001]={0}//初始化数组全为0
      cin>>n;//朋友圈的个数 
     for(int i=0;i<n;i++){
         int m;
         cin>>m;//每个朋友圈的朋友人数 
      for(int j=0;j<m;j++){  
       int p;
            cin>>p;//朋友圈每个朋友的ID 
             if(m!=1)//没全对的原因 
             a[p]=1;//每个朋友ID数组值赋值1 
        }
     }
     int k,flag=1;
     cin>>k;//要查询ID的个数 
     for(int i=0;i<k;i++){
        int g;
        cin>>g;//输入要查询的k个ID 
        if(a[g]!=1){//如果数组值不为1 证明此ID和朋友圈中任一ID都不相同 
             if(flag!=0){//flag=1 
             printf("%05d",g);//输出不相同的ID 
             flag=0;
             a[g]=1;//把已经输出的ID数组值改为1,题目要求同一个人可以被查询多次,但只输出一次。 
             }
             else{
                 printf(" %05d",g);
                 a[g]=1;
             }    
         }
         
     }
     if(flag != 0)
    printf("No one is handsome");//没有与以上ID不相同的ID 
    printf("\n");
    return 0;

 }

参考http://blog.youkuaiyun.com/orange2a/article/details/51911805

这题比较巧妙的利用flag和数组改值,大大减少了代码量。

 
<think>嗯,用户想找关于“L1-020 朋友”这个题目的Java编程题解或者练习说明。首先,我需要确认这个题目属于哪个竞赛或题库。根据用户提供的引用内容,特别是引用[2]提到了2024团体程序设计天梯赛的JAVA L1部分,可能这个题目是天梯赛的题目之一。不过用户提供的引用中有直接提到L1-020的具体内容,所以可能需要依靠已有的知识库或外部信息来补充。 接下来,我应该回忆一下“L1-020 朋友”的具体题目要求。通常,天梯赛的L1级别题目是基础题,考察基本编程能力和逻辑处理。根据常见的题目模式,这个题目可能涉及集合的使用,比如判断某个元素是否在集合中,或者处理唯一性相关的问题。例如,题目可能是要求找出那些朋友的“”的人,即那些在社交网络中只出现一次的人,或者未被其他人关注的个体。 然后,我需要考虑如何用Java来解决这类问题。通常会用到集合类,比如HashSet来存储有朋友的人,然后遍历所有输入,将符合条件的排除。例如,如果某个人的ID在多个朋友圈中出现,则他们不算“朋友”。反之,那些只出现一次或者未被任何朋友圈包含的人会被选中。需要注意的是,可能朋友圈中如果只有自己一个人,那么这个人也不算有朋友,或者根据题目具体条件而定。 用户提供的引用[2]中的代码涉及输入处理和条件判断,这可能与处理多个测试用例、统计技能点有关,但结构上可以参考。比如,使用Scanner读取输入,然后进行循环处理。此外,引用[3]中的方法二展示了如何处理日期格式,可能涉及字符串或数值的分解,这在处理ID分段时可能有参考价值。 需要确保题解的结构清晰,包括输入格式、输出格式、解题思路、代码实现和注意事项。例如,可能的步骤是:读取所有朋友圈的信息,记录所有有朋友的人,然后检查查询列表中的ID是否在集合中,或者是否满足其他条件。最后输出符合条件的ID,并按顺序排列,同时处理格式问题如不足五位补零。 还需要注意边界条件,比如当朋友圈只有一个人时,该人是否有朋友。例如,题目可能规定,如果朋友圈中只有自己,则不算有朋友。因此,在代码中需要过滤掉那些出现在多个朋友圈中,或者自己所在朋友圈的人数大于1的情况。 此外,用户可能希望看到具体的代码示例,如使用HashSet来存储有朋友的人,然后遍历查询列表,判断每个ID是否在集合中,如果不在,则记录下来,并确保不重复输出。同时,需要考虑输出的格式,比如空格分隔、补零等细节。 最后,生成相关问题时要围绕该题目的知识点,比如集合的使用、输入处理、边界条件处理,以及类似的算法题应用场景。</think>### L1-020 朋友 Java题解 #### 题目描述 给定多个朋友圈的成员列表,找出那些"朋友"的人(即不属于任何多人朋友圈的独立个体)。若朋友圈只有1人,则此人朋友。 #### 输入格式 1. 首行输入朋友圈数$N$ 2. 每个朋友圈输入格式:$K$ $ID_1$ ... $ID_K$ 3. 最后输入查询数量$M$和$M$个待查ID #### 输出格式 按输入顺序输出所有符合条件的ID(不足5位补前导0),若所有被查询者都有朋友则输出`No one is handsome` #### 解题思路 1. **集合筛选**:使用`HashSet`记录所有有朋友的人 2. **排除规则**: - 朋友圈人数 ≥ 2:所有成员都有朋友 - 朋友圈人数 = 1:该成员朋友 3. **结果验证**:遍历查询列表,筛选出未出现在"有朋友"集合中的ID #### 代码实现 ```java import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); Set<String> hasFriends = new HashSet<>(); List<String> result = new ArrayList<>(); int N = sc.nextInt(); for (int i = 0; i < N; i++) { int K = sc.nextInt(); if (K >= 2) { for (int j = 0; j < K; j++) { String id = String.format("%05d", sc.nextInt()); hasFriends.add(id); } } else { sc.nextInt(); // 单人不记录 } } int M = sc.nextInt(); Set<String> checked = new HashSet<>(); for (int i = 0; i < M; i++) { String query = String.format("%05d", sc.nextInt()); if (!hasFriends.contains(query) && !checked.contains(query)) { result.add(query); checked.add(query); } } if (result.isEmpty()) { System.out.println("No one is handsome"); } else { System.out.println(String.join(" ", result)); } } } ``` #### 关键点说明 1. **格式化处理**:使用`String.format("%05d", num)`处理5位补零 2. **去重逻辑**:通过`checked`集合避免重复输出 3. **性能优化**:哈希集合保证$O(1)$时间复杂度的查询操作[^1] 4. **边界处理**:正确处理单人朋友圈的特殊情况[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值