1. 程式人生 > >華為2015機試題

華為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");

}