出书最多

365 篇文章 124 订阅

描述
假定图书馆新进了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

解题

用一个结构体把作者表示(书本数目,书本id),最后得到最大即可

代码
#include <iostream>
#include <cstring>
using namespace std;
struct name{//作者
    int have=0;
    int all[1000];
}wr[30];
int main(){
    int id;
    char s[30];
    int n;
    cin>>n;
    for (int i = 0; i < n; ++i) {
        cin>>id;
        cin>>s;
        int len=strlen(s);
        for (int j = 0; j < len; ++j) {//把书转到作者
            wr[s[j]-'A'].all[wr[s[j]-'A'].have]=id;
            wr[s[j]-'A'].have++;
        }
    }
    int max=0;
    for (int i = 0; i < 26; ++i) {//最大
        if(wr[max].have<wr[i].have)max=i;
    }
    
    cout<<(char)(max+'A')<<endl;//输出
    cout<<wr[max].have<<endl;
    for (int i = 0; i < wr[max].have; ++i) {
        cout<<wr[max].all[i]<<endl;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值