来看一道有亿点傻的题
Description
差不多先生觉得任何事差不多就行了,比如让他比较两个长度不超过 100 的小写字母构成的字符串
,他就觉得只要每个字母分别在
中出现的次数之差的绝对值小于等于一个整数 k,就可以认为它们差不多相等啦!
下面请你来看看,对于给出的字符串,差不多先生的判断是什么?
Format
Input
输入多行
每行分别输入两个字符串
,以及一个整数k(1≤k≤10)
Output
对于每行输入,如果差不多先生会认为它们相等,就输出
Yes
,否则输出No
。Samples
输入数据 1
oooo zccz 4 oooo zccz 3 oooo zccz 2
输出数据 1
Yes No No
Hint
字符串 "oooo" 中有 4 个 'o' ,但是 "zccz" 中有 0 个 'o',两者之差为 4 。
这题用两个数组 ct1,ct2,用来表示=
的ch元素出现的次数
然后,就有我的首次代码
#include <bits/stdc++.h>
using namespace std;
int ct1[1007],ct2[1007],k;
string s1,s2;
bool chk(){
for(int i='a';i<='z';++i)
if(ct1[i]-ct2[i]>k) return 0;//不满足条件就返回
return 1; //没有返回1
}
int main(){
while(cin>>s1>>s2>>k){//多组数据输入
for(int i=0;i<s1.size();++i) ct1[s1[i]]++;//s1统计各个元素的个数
for(int i=0;i<s2.size();++i) ct2[s2[i]]++;//s2统计各个元素的个数
cout<<(chk()?"Yes\n":"No\n");//输出
}
}
结果就是some ugly things发生,那就是不对
结果检查了一下发现
它让你求差,有没制定谁大谁小
所以chk函数应该改为这样
bool chk(){
for(int i='a';i<='z';++i)
if(abs(ct1[i]-ct2[i])>k) return 0;//不满足条件就返回
return 1; //没有返回1
}
但是,还不对
经过我神奇的尝试
首先我输入
aaabcbs uwfidf 2
qwert dfgh 2
他的结果是
No
No
但如果是
qwert dfgh 2
他的结果是
Yes
我发现,我没memset!
加上这两行代码,就能100
memset(ct1,0,sizeof ct1);
memset(ct2,0,sizeof ct2);
来看最终100的代码
#include <bits/stdc++.h>
using namespace std;
int ct1[1007],ct2[1007],k;
string s1,s2;
bool chk(){
for(int i='a';i<='z';++i)
if(abs(ct1[i]-ct2[i])>k) return 0;//不满足条件就返回
return 1; //没有返回1
}
int main(){
while(cin>>s1>>s2>>k){//多组数据输入
memset(ct1,0,sizeof ct1);
memset(ct2,0,sizeof ct2);
for(int i=0;i<s1.size();++i) ct1[s1[i]]++;//s1统计各个元素的个数
for(int i=0;i<s2.size();++i) ct2[s2[i]]++;//s2统计各个元素的个数
cout<<(chk()?"Yes\n":"No\n");//三步运算输出
}
}