1、查找兄弟字符串
题目看懂了吗?那现在我们就可以分析一下,第一次输入的数字是你即将要输入的n个字符串个数;第二步要输入的就是n个字符串;第三步输入的是你想要匹配的字符串;第四步的n就是你找出的兄弟字符串中的第m个
代码奉上:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
bool isBrother(string str, string s) { //判断是否为兄弟字符串
if (str.size() == s.size()) {
if (str == s)
return false;
sort(str.begin(), str.end()); //分别对两个字符串进行字典序排序
sort(s.begin(), s.end());
if (str == s)
return true;
}
return false;
}
int main() {
int num; //输入字符串数量
while (cin >> num) {
string str;
string word, s;
int index;
vector<string> vs;
for (int i = 0; i < num; ++i) {
cin >> str; //输入字符串
vs.push_back(str);
}
sort(vs.begin(), vs.end()); // 因为是字典,一定要排序!!
cin >> word; //输入要匹配的标志字符串
cin >> index; //输入要输出的第几个兄弟字符串
int counts = 0;
for (int i = 0; i < num; ++i) {
if (isBrother(word, vs[i])) {
counts++;
if (counts == index)
s = vs[i];
}
}
if (!vs.empty())
cout << counts << endl;
if (counts >= index)
cout << s << endl;
}
return 0;
}
2、乒乓球筐
题目描述:
nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?
思路:这个题是典型的map的应用,我们先将A、B两个字符串放入map中,map中第一个参数是字符串的第i位,第二个参数就是第i位出现的次数,然后当i从字符‘A’–‘Z’增加中,如果A[i]<B[i],返回No,跳出循环,如果i已经走到Z,则返回Yes
代码:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
string str1,str2;
while(cin>>str1>>str2)
{
map<char,int> m1;
for(auto e1:str1)
{
m1[e1]++;
}
map<char,int> m2;
for(auto e2:str2)
{
m2[e2]++;
}
for(int i='A';i<'Z';i++)
{
if(m1[i]<m2[i])
{
cout<<"No"<<endl;
break;
}
if(i=='Z')
{
cout<<"Yes"<<endl;
}
}
}
sysem("pause");
return 0;
}
3、骆驼命名法
题目描述:
从C/C++转到Java的程序员,一开始最不习惯的就是变量命名方式的改变。C语言风格使用下划线分隔多个单词,例如“hello_world”;而Java则采用一种叫骆驼命名法的规则:除首个单词以外,所有单词的首字母大写,例如“helloWorld”。
请你帮可怜的程序员们自动转换变量名。
题目很简单,代码也很简单,一个for循环就可以搞定,先找到‘_’的位置,即为第i位,再erase掉,再将第i位的字符串转成大写。
代码:
#include <iostream>
#include <stdlib.h>
#using namespace std;
int main()
{
string str;
while(cin>>str)
{
for(int i=0;i<str.size();i++)
{
if(str[i]=='_')
{
str.erase(i,1);
str[i]-=32;
}
}
cout<<str<<endl;
}
}
有问题的欢迎广大读者指正!!!