出书最多

总时间限制:
1000ms
内存限制:
65536kB
描述

假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们都是由n(1 ≤ 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 
本题考查的是对字符串的运用及提取字符和循环的综合应用,下面附上ac代码。
#include<stdio.h>
#include<string.h>
int main()
{
    int n,a[1001]={0},s[27]={0},i,j,maxi=-1,k,l;
    char b[1001][27]={0};
    scanf("%d",&n);
    for(i=1;i<=n;i++)
     scanf("%d %s",&a[i],&b[i]);
   for(i=1;i<=n;i++)
   {
        l=strlen(b[i]);
       for(j=0;j<l;j++)
       {
           s[b[i][j]-'A']++;
       }
   }
   for(i=0;i<26;i++)
   {
       if(s[i]>maxi)
       {
           maxi=s[i];
           k=i;
       }

   }
   printf("%c\n",'A'+k);
   printf("%d\n",maxi);
   for(i=1;i<=n;i++)
   {
       l=strlen(b[i]);
       for(j=0;j<l;j++)
       {
           if(b[i][j]-'A'==k)
           {                printf("%d\n",a[i]);
           }
       }
   }
   return 0;

}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值