所有代码都在github
21.简单密码
大写字母转成小写+1,即A变成b
小写字母按九宫格排列转成数字,这里我比较暴力,直接map一下
数字不变
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map< char,char> m;
m['a']='2';
m['b']='2';
m['c']='2';
m['d']='3';
m['e']='3';
m['f']='3';
m['g']='4';
m['h']='4';
m['i']='4';
m['j']='5';
m['k']='5';
m['l']='5';
m['m']='6';
m['n']='6';
m['o']='6';
m['p']='7';
m['q']='7';
m['r']='7';
m['s']='7';
m['t']='8';
m['u']='8';
m['v']='8';
m['w']='9';
m['x']='9';
m['y']='9';
m['z']='9';
string str;
while(cin >> str)
{
for(int i=0;i<str.size();++i)
{
if(str[i]<='z'&&str[i]>='a')
{
str[i]=m[str[i]];
}
else if(str[i]<='Z'&&str[i]>='A')
{
str[i]=std::tolower(str[i]);
if(str[i]=='z')
str[i]='a';
else
str[i]+=1;
}
}
cout<<str<<endl;
}
return 0;
}
22.汽水瓶
智力题,三个空瓶子可以换一个瓶,并且当最后剩下两个空瓶子的时候,还可以借一瓶。
假设刚开始有n个瓶子,那么这一次可以喝n/3瓶汽水,这n/3瓶汽水多出来的空瓶子和n/3没除尽的空瓶子将进入下一次结算。
因此每次迭代 n=n/3+n%3
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
if(n==0)
break;
int count=0;
while(n/3)
{
count+=n/3;
n=n/3+n%3;
}
cout<<count+n-1<<endl;
}
return 0;
}
23.删除字符串中出现次数最少的字符
我的做法比较暴力,字符串中每个字符都hash一下统计出现次数,
接着把最小值找到,最后遍历原串,把不等于最小值的输出即可。
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main()
{
int minVal=21;
string str;
while(cin >> str)
{
unordered_map<char,int>m;
for(int i=0;i<str.size();++i)
{
m[str[i]]++;
}//init
for(auto it = m.begin();it!=m.end();++it)
{
if(it->second<minVal)
minVal=it->second;
}
string res;
for(int i=0;i<str.size();++i)
{
if(m[str[i]]!=minVal)
res+=str[i];
}
cout<<res<<endl;
}
return 0;
}
24.合唱队
这题有点意思,看了大神题解才做出来。传送门: