您的位置:首页 > 其它

华为 oj 简单密码破解&&汽水瓶&&删除字符串中出现次数最少的字符&&字符串排序

2016-08-18 21:17 441 查看
这四道题就不上图了,因为太简单,就四道题凑在一起了,应该放在简单题中。

第一题.这道题只需要注意字母‘Z’时候的转换,直接上代码

#include<iostream>
#include<string>
using namespace std;

int main()
{
string inStr = "";
cin >> inStr;
int i = 0;

for (; i<inStr.size(); i++)
{
if (inStr[i] >= 'A'&&inStr[i] <= 'Z')
{
if (inStr[i] == 'Z')
{
inStr[i] = 'a';
}
else
{
inStr[i] = 'a' + (inStr[i] - 'A') + 1;
}
}
else if (inStr[i] >= 'a'&&inStr[i] <= 'z')
{
if (inStr[i] == 'z')
{
inStr[i] = '9';
}
else
{
inStr[i] = (inStr[i] - 'a') / 3 + '0' + 2;
}
}
}

cout << inStr << endl;
return 0;
}
第二题,只要找到规律就好,只要注意剩余两个瓶子的时候可以向老板借一瓶喝完就有三个空瓶又可以还给老板一瓶,其他的逢3结果就加1就可以了。

上代码

#include<iostream>
using namespace std;

int main()
{
int n, res = 0;

while (cin >> n)
{
if (n <= 0 || n >= 100)
{
return 0;
}
if (n == 1)
{
cout << 0 << endl;
continue;
}

while (n != 0)
{
res += n / 3;
n = n / 3 + n % 3;

if (n == 2)
{
res++;
break;
}
else if (n == 1)
{
break;
}
}
cout << res << endl;
res = 0;
}
return 0;
}


第三题用map直接统计次数,找到最小的一个或几个不输出就可以了。

上代码

#include<iostream>
#include<string>
#include<map>
using namespace std;
int main()
{
map<char, int> res;
string inStr = "";

cin >> inStr;
int i = 0;
int len = inStr.size();

//统计个数
for (i = 0; i<len; i++)
{
res[inStr[i]]++;
}
int min = 10000;

for (map<char, int>::iterator iter = res.begin(); iter != res.end(); iter++)
{
if (iter->second<min)
{
min = iter->second;
}
}

for (i = 0; i<len; i++)
{
if (res[inStr[i]] != min)
{
cout << inStr[i];
}
}

cout << endl;
return 0;
}


第四题,稍微有点绕,首先我们要保证字母的顺序是a-z进行排列的,同时要保证相同位置的字母按原来的顺序排列,所以我定义了一个挺有意思的数据结构

vector<char> list[26]; 



所以相同位置的字母我们只需要按发现的顺序push_back就可以了,直接上代码能更清晰,但是同时要注意非字母的直接正常输出。

#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main()
{
string inStr = "", tmp = "";
int i = 0, j = 0, k = 0;
vector<char> list[26];

getline(cin, inStr);

//统计排序
for (i = 0; i<inStr.size(); i++)
{
if (inStr[i] >= 'A'&&inStr[i] <= 'Z')
{
list[inStr[i] - 'A'].push_back(inStr[i]);
}
else if (inStr[i] >= 'a'&&inStr[i] <= 'z')
{
list[inStr[i] - 'a'].push_back(inStr[i]);
}
}

for (j = 0; j<26; j++)
{
for (k = 0; k<list[j].size(); k++)
{
tmp += list[j][k];
}
}

j = 0;
for (i = 0; i<inStr.size(); i++)
{
if ((inStr[i] >= 'A'&&inStr[i] <= 'Z') || (inStr[i] >= 'a'&&inStr[i] <= 'z'))
{
inStr[i] = tmp[j];
j++;
}
}

cout << inStr;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: