胡桃这段时间在学习使用活字印刷术印刷英语句子,为了在印刷时能够快速找到对应的字母方块,胡桃把所有的字母方块都进行了分类,并将相同的字母方块放入一个收纳箱里面,而为了知道每一个收纳箱里面的方块种类和数量,胡桃便给收纳箱上贴了标签,(标明字母方块的种类和数量,当收纳箱里的方块只有一个时,胡桃便不会标明数量),分类好后将收纳箱整齐的排成一行。为了检验自己的活字印刷技术,便想着印刷出一个成品,胡桃就提笔写下了一句英语句子。而为了知道自己方块的种类和数量够不够印刷出这一英语句子,于是请聪明的旅行者帮忙统计一下,而旅行者正在学习C语言,便写了一个程序去统计方块的种类和数量够不够^_^。
输入格式:
第一行给出胡桃的收纳箱序列以@符号结束
第二行给出胡桃提笔写下的英语句子以@符号结束
输出格式:
如果胡桃的字母方块够就输出”You still left x square“
(x为胡桃剩下的方块数量)
不够就输出”You need x square“
(x为胡桃差的方块数量)。
样例解释: 以下两行的数据对应方式为‘方块所打印的字母’(方块数量)
胡桃的方块分别有: ’A’(1) ‘r‘(2) ‘e‘(1) ‘s‘(1) ‘t‘(1) ‘ ‘(2) ‘q‘(2) ‘i‘(2) ‘k‘(3) ‘m’(2)。
印刷英语句子需要:’A’(1) ‘r‘(2) ‘e‘(1) ‘s‘(1) ‘t‘(1) ‘ ‘(2) ‘q‘(2) ‘i‘(2)。
可以看出胡桃的方块拿出需要的去印刷英语句子后还剩下了3个k和2个m,所以胡桃的方块数量和种类都够,输出”You still left 5 square“
。
注: 输入数据保证没有数字种类的方块,数字只表示方块数量。
输入样例:
Ar2est 2q2i2k3m2@
Arrest qi qi@
输出样例:
You still left 5 square
题解代码:
#include<bits/stdc++.h>
using namespace std;
int A[128],B[128];
int main()
{
char c;
int flag=1,i=0;
string a,b;
getline(cin,a);
getline(cin,b);
while(a[i]!='@'){
int f=0,k=0;
A[(int)a[i]]=1;
c=a[i++];
while(a[i]>='0'&&a[i]<='9'){
k=k*10+(a[i++]-'0');
f=1;
}
if(f) A[(int)c]=k;
}
i=0;
int s1=0,s2=0;
while(b[i]!='@') B[(int)b[i++]]++;
for(i=0;i<=127;i++){
if(A[i]<B[i]){
flag=0;
}
s1+=A[i]-B[i];
if(B[i]>=A[i]) s2+=B[i]-A[i];
}
if(flag) cout<<"You still left "<<s1<<" square";
else cout<<"You need "<<s2<<" square";
return 0;
}
22软件 张某人