第1题 统计字母
某次科研调查时得到了n个字母。现在需要统计这些字母各自出现的次数,并按照字母的ASCII码从小到大的顺序输出统计结果。
输入格式
输入数据共两行,第一行是整数n,表示字母的个数;(1<=n<=100000)
第2行,为一个字符串,全部是大写字母。
输出格式
输出包含m行(m为n个字母中不相同数的个数),按照字母ASCII码从小到大的顺序输出。每行输出两个值,分别是字母和该字母出现的次数,其间用一个空格隔开。
输入/输出例子1
输入:
8
ABCABZWZ
输出:
A 2
B 2
C 1
W 1
Z 2
#include<bits/stdc++.h>
using namespace std;
int n,a[1005];
char c;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>c;
a[int(c)]++;
}
for(int i=1;i<=90;i++){
if(a[i]>=1)cout<<char(i)<<" "<<a[i]<<'\n';
}
return 0;
}
第2题 字符归类
输入一篇文章,归类统计大写字母,小写字母、数字字符,还有其他字符的个数。
输入格式
输入数据共n+1行,第1行 输入n
以下有n行,每行最多不超过200个字符,保证没有空格。
输出格式
输出数据共4行,
第1行大写字母个数;
第2行小写字母个数;
第3行数字字符的个数;
第4行其他字符的个数。
输入/输出例子1
输入:
2
23123ASJDFHAKJSaafd%^&$133
faskasdfjfaADFAKIE1231564()(
输出:
A-Z:17
a-z:15
0-9:15
qita:7
#include<bits/stdc++.h>
using namespace std;
int n,s1,s2,s3,s4;
string s;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
for(int j=0;j<s.size();j++){
if(s[j]>='A'&&s[j]<='Z')s1++;
else if(s[j]>='a'&&s[j]<='z')s2++;
else if(s[j]>='0'&&s[j]<='9')s3++;
else s4++;
}
}
cout<<"A-Z:"<<s1<<'\n';
cout<<"a-z:"<<s2<<'\n';
cout<<"0-9:"<<s3<<'\n';
cout<<"qita:"<<s4;
return 0;
}
第3题 手机
手机的键盘是这样的:
如下图所示:
要按出英文字母就必须要按数字键多下。例如要按出x就得按9两下,第一下会出w,而第二下会把w变成x。0键按一下会出一个空格。
你的任务是读取若干句只包含英文小写字母和空格的句子,求出要在手机上打出这个句子至少需要按多少下键盘。
输入格式
一行一个句子,只包含英文小写字母和空格,且不超过200个字符。
输出格式
一行一个整数,表示按键盘的总次数。
输入/输出例子1
输入:
i have a dream
输出:
23
#include<bits/stdc++.h>
using namespace std;
char c[27]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
string x;
int a[26]={0},s=0;
int main(){
getline(cin,x);
int n=x.size();
for(int i=0;i<n;i++){
if(x[i]==' '){
s++;
continue;
}
for(int j=0;j<26;j++){
if(c[j]==x[i]){
a[j]++;
break;
}
}
}
s+=3*(a[2]+a[5]+a[8]+a[11]+a[14]+a[17]+a[21]+a[24])+4*(a[18]+a[25])+a[0]+a[3]+a[6]+a[9]+a[12]+a[15]+a[19]+a[22]+2*(a[1]+a[4]+a[7]+a[10]+a[13]+a[16]+a[20]+a[23]);
cout<<s;
return 0;
}
第4题 字符串合并
读入两个字符串S1,S2,长度不超过120,把这两个字符串合并成一个串S,规则如下:如果S1串长度大于S2串的长度,即S1串的第一个字符在前面,后跟S2串的第一个字符,如此重复到最后,反之,则把S2串的第一个字符放前面,后接S1串的第一个字符,一直得重复到结束。
输入格式
输入为两行,分别为两个字符串,如:
abcd
12345
输出格式
输出为一行,为合并后的字符串,如上例为:1a2b3c4d5
输入/输出例子1
输入:
a
bcd
输出:
bacd
输入/输出例子2
输入:
123456
abcd
输出:
1a2b3c4d56
#include<bits/stdc++.h>
using namespace std;
string s,s1;
int main(){
cin>>s>>s1;
if(s.size()>s1.size()){
for(int i=0;i<s1.size();i++){
cout<<s[i]<<s1[i];
}
for(int i=s1.size();i<s.size();i++){
cout<<s[i];
}
}
else {
for(int i=0;i<s.size();i++){
cout<<s1[i]<<s[i];
}
for(int i=s.size();i<s1.size();i++){
cout<<s1[i];
}
}
return 0;
}
第5题 生日礼物
聪明的 chnlkw 收到了很多礼物,但是作为 chnlkw 的经纪人萝卜,很想知道 chnlkw这次共收到了价值多少的礼物。Chnlkw 对每一件礼物都作了自动的登记。而经纪人通过网络查找到了它们的价值。现在请你帮他们计算一下礼物的总价值。
输入格式
输入文件 gift.in 共 N+K+1 行。
第一行为正整数 n,k 表示共收到了 n 件礼物,经纪人查到了 k 件物品的价值;
接下来的 n 行,包含礼物的名称(名称不包含空格)和这件礼物件数,中间有且仅有一个空格;
接下来的 k 行,包含了经纪人查到物品名称和价值,中间有且仅有一个空格;
输出格式
输出文件 gift.out 共1 行。只输出一个数字,表示礼物的总价值;如果无法确定礼物的总价值,则输出 Unknow
输入/输出例子1
输入:
4 6
Apple 1
Pear 2
Juice 4
OkCard 5
Apple 5
Pear 6
OkCard 0
Juice 2
Car 100000
Plane 1000000
输出:
25
样例解释
【数据范围】
对于 30%的数据,n,k≤100 。
对于 70%的数据,n,k≤1000。
对于 100%的数据,n≤1000, k≤2000。
所有输入数据保证小于 int的最大值。物品名称的长度≤10 。
#include<bits/stdc++.h>
using namespace std;
long long n,m,s,x;
struct str{
string name;
int js,jg;
}a[100005],b[100005];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].name>>a[i].js;
}
for(int i=1;i<=m;i++){
cin>>b[i].name>>b[i].jg;
for(int j=1;j<=n;j++){
if(b[i].name==a[j].name)a[j].jg=b[i].jg,x++;
}
}
for(int i=1;i<=n;i++){
s+=(a[i].js*a[i].jg);
}
if(x>=n)cout<<s;
else cout<<"Unknow";
return 0;
}
第6题 5和6
老师在黑板写了两个整数A和B,让奶牛Bessie做加法运算,Bessie比较笨,可能会数字5和6混淆,则既可能把5错看成了6,也可能把6错看成了5。问:Bessie可能得到的最小值和最大值分别是多少。
输入格式
第一行,两个整数,A和B,1 <= A ,B <=1000000。
输出格式
一行,可能得到的最小值和最大值。
输入/输出例子1
输入:
11 25
输出:
36 37
输入/输出例子2
输入:
1430 4862
输出:
6282 6292
输入/输出例子3
输入:
16796 58786
输出:
74580 85582
#include<bits/stdc++.h>
using namespace std;
long long a,b,c,d,e,f,s,s1,x[10005],y[10005];
int main(){
cin>>a>>b;
d=a,e=b;
while(a){
c++;
x[c]=a%10;
if(x[c]==6)x[c]=5;
a/=10;
}
for(int i=c;i>=1;i--){
s=s*10+x[i];
}
while(b){
f++;
y[f]=b%10;
if(y[f]==6)y[f]=5;
b/=10;
}
for(int i=f;i>=1;i--){
s1=s1*10+y[i];
}
cout<<s+s1<<" ";
s=0,s1=0,c=0,f=0;
while(d){
c++;
x[c]=d%10;
if(x[c]==5)x[c]=6;
d/=10;
}
for(int i=c;i>=1;i--){
s=s*10+x[i];
}
while(e){
f++;
y[f]=e%10;
if(y[f]==5)y[f]=6;
e/=10;
}
for(int i=f;i>=1;i--){
s1=s1*10+y[i];
}
cout<<s+s1;
return 0;
}
第7题 乐乐的图形
乐乐最近玩起了字符游戏,规则是这样的:读入四行字符串,其中的字母都是大写的,乐乐想打印一个柱状图显示每个大写字母的频率。你能帮助她吗?
输入格式
输入文件共有4行:每行为一串字符,不超过72个字符。
输出格式
与样例的格式保持严格的一致。
输入/输出例子1
输入:
THE QUICK BROWN FOX JUMPED OVER THE LAZY DOG.
THIS IS AN EXAMPLE TO TEST FOR YOUR
HISTOGRAM PROGRAM.
HELLO!
输出:
#include<bits/stdc++.h>
using namespace std;
int s[50],mx,i,j,k,l;
string ss;
int main(){
for(i=1;i<=4;i++){
getline(cin,ss);
l=ss.length();
for(j=0;j<l;j++){
if(ss[j]>='A'&&ss[j]<='Z'){
s[ss[j]-'A']++;
mx=max(mx,s[ss[j]-'A']);
}
}
}
for(i=mx;i>=1;i--){
for(j=0;j<=25;j++){
if(s[j]>=i)printf("*");
else printf(" ");
printf(" ");
}
printf("\n");
}
for(k=0;k<26;k++){
printf("%c ",k+'A');
}
return 0;
}
第8题 机器人交警
某座城市一共有26个交通路口,分别用大写英文字母A、B、……、Z表示。交通管理部门研制了一批机器人交通警察,并按如下的规则派出这些机器人到交通路口协助指挥交通:
⑴每次派出两名机器人;
⑵当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通路口上指挥交通;有多个字母相同时,两名机器人需要按字母的先后次序到这些路口上巡逻。
⑶当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效(WuXiao)。
假设这些机器人的名字全由大写字母组成。请你编一个程序,来指挥这些机器人交警的工作。
输入格式
第一行输入第一个机器人的名字;
第二行输入第二个机器人的名字。
输出格式
⑴当不能派出机器人时,在第一行输出"WuXiao";
⑵当两名机器人在路口上指挥交通时,在第一行输出"ZhiHui",第二行输出路口编号;
⑶当两名机器人在路口上巡逻时,在第一行输出"XLuo",第二行输出巡逻的路口数,第三行输出巡逻线路。
输入/输出例子1
输入:
LPT
BYHK
输出:
WuXiao
输入/输出例子2
输入:
KEYDDD
CHEN
输出:
ZhiHui
E
输入/输出例子3
输入:
OPEN
CLOSE
输出:
XLuo
2
E-O
输入/输出例子4
输入:
EPSON
SENPUM
输出:
XLuo
4
E-N-P-S
#include<bits/stdc++.h>
using namespace std;
bool cmp(char x,char y){
if(x!=y){
return x<y;
}
}
int m,n,f,k,s;
string a,b;
char c[10005];
int main(){
cin>>a>>b;
m=a.size(),n=b.size();
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(a[i]==b[j])
f=1,c[k]=a[i],s++,k++;
sort(c,c+k,cmp);
for(int i=0;i<k-1;i++)
if(c[i]==c[i+1])
c[i]='0',s--;
if(f==1&&s>=2){
printf("XLuo\n%d\n",s);
for(int i=0;i<k-1;i++)
if(c[i]!='0')
printf("%c-",c[i]);
int i=k-1;
printf("%c",c[i]);
}
if(f==1&&s<2)printf("ZhiHui\n%c",c[0]);
if(f==0)printf("WuXiao");
return 0;
}