• Openjudge-NOI题库-出书最多


    描述

    假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们都是由n(2 ≤ n ≤ 26)个作者独立或相互合作编著的。假设m本图书编号为整数(1到999),作者的姓名为字母('A'到'Z'),请根据图书作者列表找出参与编著图书最多的作者和他的图书列表。

    输入
    第一行为所进图书数量m,其余m行,每行是一本图书的信息,其中第一个整数为图书编号,接着一个空格之后是一个由大写英文字母组成的没有重复字符的字符串,每个字母代表一个作者。输入数据保证仅有一个作者出书最多。
    输出
    输出有多行:
    第一行为出书最多的作者字母;
    第二行为作者出书的数量;
    其余各行为作者参与编著的图书编号(按输入顺序输出)。
    样例输入
    11
    307 F
    895 H
    410 GPKCV
    567 SPIM
    822 YSHDLPM
    834 BXPRD
    872 LJU
    791 BPJWIA
    580 AGMVY
    619 NAFL
    233 PDJWXK
    样例输出
    P
    6
    410
    567
    822
    834
    791
    233
    来源:
    北京大学 计算概论 06 心理及信管 期末考试
    思路:这题呢,蛮简单,可以运用结构体,统计每本书中作者最多的是哪位,再循环判断出了哪些书,输出即可。
    代码如下:
     1 #include <stdio.h>
     2 #include <string.h>
     3 struct book
     4 {
     5     int num;
     6     char writer[300];
     7 };
     8 int main()
     9 {
    10     int m,i,j;
    11     int xiabiao;//出书最多作者下标 
    12     int large;//出书最多作者出的书 
    13     char large2;//出书最多作者名字 
    14     int flag[26];//统计每个作者名字出现的个数 
    15     struct book a[999];//结构体,存储编号,作者姓名 
    16     scanf("%d",&m);
    17     for(i=0;i<26;i++)//初始化 
    18     {
    19         flag[i]=0;
    20     }
    21     for(i=0;i<m;i++)//输入编号、作者 
    22     {
    23         scanf("%d%s",&a[i].num,&a[i].writer);
    24     }    
    25     for(i=0;i<m;i++)//统计每个作家名字出现次数 
    26     {
    27         for(j=0;j<strlen(a[i].writer);j++)
    28         {
    29             flag[a[i].writer[j]-65]++;
    30         }
    31     }
    32     large=flag[0];    
    33     for(i=0;i<26;i++)//找出出书最多的作家 
    34     {
    35         if(flag[i]>large)//如果发现一个比目前还要大的,更新 
    36         {
    37             xiabiao=i;
    38             large=flag[i];
    39         }        
    40     } 
    41     large2=xiabiao+65;
    42     printf("%c
    %d
    ",large2,large);//输出出书最多作家名字、著作篇数 
    43     for(i=0;i<m;i++)
    44     {
    45         for(j=0;j<strlen(a[i].writer);j++)
    46         {
    47             if(a[i].writer[j]==large2) 
    48             {
    49                 printf("%d
    ",a[i].num);
    50                 break; 
    51             }            
    52         }
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    python实现求解列表中元素的排列和组合
    python3.7 安装dlib和face_recognition
    Python 魔法函数
    python的68个内置函数
    生成器和生成器函数,推倒式
    函数名的应用,闭包,迭代器
    函数的进阶(动态参数,命名空间和作用域,函数的嵌套,gloabal和nonlocal关键字)
    python 函数
    文件操作
    字典和列表的删除问题, 深浅拷贝
  • 原文地址:https://www.cnblogs.com/geek-007/p/4940897.html
Copyright © 2020-2023  润新知