1 条题解
-
0
自动搬运
来自洛谷,原作者为

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
- 上传者