华为2015机试题

字符串分解

按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000” 
分析思路: 
容易题 
1.获得字符串的长度length后,判断与要输出位数N的大小,大于N的话,直接printf前N位字符,然后length-=N; 
2.再次循环判断与要输出位数N的大小,如果小于N的话,输出length个字符和n-length个0字符。 
3.重复循环直到length<0。 

#include <iostream>

using namespace std;

 

void resolve(char *str, int N){

int length = strlen(str);             //获得字符串的长度length

char strtemp[255];

while (length>0){                    //循环直到length<0

if (length >= N)                  //大于N,直接printfN位字符

{

int i;

for (i = 0; i<N; i++)

{

strtemp[i] = *str;

str++;

}

strtemp[i] = '\0';            ////记得添加\0  

}

else                            //小于N,输出length个字符和n-length0字符

{

int i;

for (i = 0; i<length; i++)

{

strtemp[i] = *str;

str++;

}

for (i = length; i<N; i++)

{

strtemp[i] = '0';

}

strtemp[i] = '\0';

}

cout << strtemp << " ";

length -= N;

}

}

 

int main(){

int M, N;

char str[255];

cin >> M >> N;

 

for (int i = 0; i<M; i++)

{

cin>>str;

resolve(str, N);

}

 

system("pause");

return 0;

}

拼音转数字
输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下: 
描述: 拼音 yi er san si wu liu qi ba jiu 
阿拉伯数字 1 2 3 4 5 6 7 8 9 
输入字符只包含小写字母,所有字符都可以正好匹配

运行时间限制:无限制 
内存限制: 无限制 
输入: 一行字符串,长度小于1000 
输出: 一行字符(数字)串 
样例输入: yiersansi 
样例输出: 1234 
#include<iostream>

#include<vector>

 

using namespace std;

 

void convert(vector<char> input)

{

int i;

int length = input.size();

for (i = 0; i < length;)

{

switch (input[i])

{

case 'y':

cout << "1";

i += 2;

break;

case 'e':

cout << "2";

i += 2;

break;

case 's':

if (input[i + 1] == 'a')

{

cout << "3";

i += 3;

}

else

{

cout << "4";

i += 2;

}

break;

case 'w':

cout << "5";

i += 2;

break;

case 'l':

cout << "6";

i += 3;

break;

case 'q':

cout << "7";

i += 2;

break;

case 'b':

cout << "8";

i += 2;

break;

case 'j':

cout << "9";

i += 3;

break;

}

}

printf("\n");

}

 

int main()

{

char c;

vector<char> str;

while (cin >> c)

{

str.push_back(c);

}

convert(str);

 

system("pause");

return 0;

}

去除重复字符并排序

运行时间限制:无限制 
内容限制: 无限制 
输入: 字符串 
输出: 去除重复字符并排序的字符串 
样例输入: aabcdefff 
样例输出: abcdef 

#include <iostream>

#include <map>

using namespace std;

 

void fun(char *str){

map<char, int> m;

int length = strlen(str);

for (int i = 0; i<length; i++)

{

m[str[i]] += 1;

}

map<char, int>::iterator it;

for (it = m.begin(); it != m.end(); it++)

{

cout << (*it).first;

}

cout << endl;

}

 

int main(){

char str[255];

while (cin >> str)

{

fun(str);

}

return 0;

}

等式转换

输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。 
1 2 3 4 5 6 7 8 9 = X 
比如: 
12-34+5-67+89 = 5 
1+23+4-5+6-7-8-9 = 5 
请编写程序,统计满足输入整数的所有整数个数。 
输入: 正整数,等式右边的数字 
输出: 使该等式成立的个数 
样例输入:5 
样例输出:2

 

#include <cstdio>

#include <iostream>

 

using namespace std;

 

const char sym[3] = { ' ', '+', '-' };

int target = 0, hitCount = 0, flag = 1;

char opts[10];

 

/*

*  lastSum,curRes分别保存上一个符号之前的计算结果与当前的数字结果,

*     1+2+345搜索到4的时候lastSum保存1+2+3的结果,curRes保存34

*  flag保存正负号相关的计算因子

*/

void Recursive_permutation(int lastSum, int curRes, char curOpt, int curNum)

{

/* 这行代码用于记录结果运算符*/

opts[curNum] = curOpt;

 

if (curOpt == sym[0])

{

curRes = curRes * 10 + flag * curNum;

}

else

{

lastSum += curRes;

flag = (curOpt == sym[1]) ? 1 : -1;

curRes = flag * curNum;

}

 

if (curNum == 9)

{

lastSum += curRes;

if (lastSum == target)

{

++hitCount;

/* 这段代码用于打印结果式子进行对照 */

for (int i = 1; i <= 9; i++)

{

if (opts[i] != ' ')

{

cout << opts[i];

}

cout << i;

}

cout << endl;

}

lastSum = curRes = 0;

flag = 1;

}

else

{

for (int i = 0; i < 3; i++)

{

int newNum = curNum + 1;

Recursive_permutation(lastSum, curRes, sym[i], newNum);

}

}

}

 

int main()

{

cin >> target;

 

Recursive_permutation(0, 0, ' ', 1);

 

cout << hitCount << endl;

system("pause");

}

 

猜你喜欢

转载自blog.csdn.net/gaopeng1111/article/details/83375770