1 条题解

  • 0
    @ 2025-8-24 22:21:41

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Utilokasteinn
    技不如人

    搬运于2025-08-24 22:21:41,当前版本为作者最后更新于2020-05-07 19:45:17,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    题目的意思是给出一个数n,输入n个字符串,储存下每个字符串开头字母的个数,最后如果有哪个字母开头出现的次数大于等于5次,就输出这个字母。如果一个字母也没有输出,就输出"PREDAJA"。

    这道题有两个思路,可以把字符转换成数字来储存,A用a[1]来,b用a[2]来……y用a[25]来,z用a[26]来。还有一个思路是用map数组来储存,不过速度会稍微慢一些,但是比较好想。

    思路1代码(实测74ms):

    #include<bits/stdc++.h>//万能头 
    using namespace std;
    int n,a[27],flag;//n是n个字符串,a数组用来存放字母出现次数,flag来判断是否有输出 
    string s;//字符串s 
    int main()
    {
    	cin>>n;//输入n 
    	for(int i=1;i<=n;i++)
    	{//输入n个字符串 
    		cin>>s;
    		a[s[0]-'a'+1]++;
    		//s[0]即第一个字符串的第一个字母 
    		//如果是a开头减去a的话就是0,所以还要加1
    	}
    	for(int i=1;i<=26;i++)//遍历每一个字母 
    	    if(a[i]>=5)cout<<char(i-1+'a'),flag=1;
    	//如果有哪个字母出现次数大于等于5的话,就输出这个字母
    	//并且flag=1,表示有输出了 
    	if(flag==0)cout<<"PREDAJA";//如果没有输出就输出"PREDAJA"
    	return 0;//程序结束 
    }
    

    思路2用map数组,可能有些人不会用map数组,其实map数组很简单

    先写一个map,map是关键字
    map<数组下标类型,数组存储类型>数组名;
    
    举一个例子:
    map<long long,long long>a;
    就是一个数组a,下标类型是long long,存储类型是long long
    有的时候数组不够大就可以这样写,就是速度会比普通数组慢一些 
    
    这道题可以开一个map数组,数组下标是char类型的,存储的数据是int型的
    就像这样:
    map<char,int>a; 
    

    思路2(实测78ms,稍微慢了一些):

    #include<bits/stdc++.h>
    using namespace std;
    int n,flag;
    string s;
    map<char,int>a;//定义一个map输出,下标类型是char,存储类型是int 
    int main()
    {
    	cin>>n;//输入字符串个数 
    	for(int i=1;i<=n;i++)
    	{//输入n个字符串 
    		cin>>s;
    		a[s[0]]++;
    		//s[0]即开头字母, 
    	}
    	for(int i='a';i<='z';i++)//从a到z所有的字母 
    	    if(a[char(i)]>=5)cout<<char(i),flag=1;
    	//这里要记得类型的强制转换 
    	if(flag==0)cout<<"PREDAJA";//如果还没有输出就输出"PREDAJA"
    	return 0;//程序结束 
    }
    

    谢谢观赏。

    • 1

    信息

    ID
    5485
    时间
    1000ms
    内存
    32MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者