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

華為2017機試題

轉為下一個字母

給定一個字串,把字串內的字母轉換成該字母的下一個字母,a換成b,z換成a,Z換成A,如aBf轉換成bCg,字串內的其他字元不改變,給定函式,編寫函式
void  Stringchang(const  char*input,char*output)

其中input是輸入字串,output是輸出字串

#include <stdio.h>

void stringChange(const char *input, char *output)
{

int i = 0;

while(input[i] != '\0'){

if(input[i] == 'z' ){

output[i] = 'a';

i++;

}else if(input[i] == 'Z'){

output[i] = 'A';

i++;

}else{

output[i] = *(input + i) + 1;

i++;

}

}

output[i] = '\0';

}

void main()
{

    char in[] = {"abHYjlzaaZbzZ"};

    char out[50];

    stringChange(in, out);

    printf("%s\n", in);

    printf("%s\n", out);

    getchar();

}

判斷數字中有無相同的部分

求一個整型數字中有沒有相同的部分,例如12386123這個整型數字中相同的部分是123,相同的部分至少應該是2位數,如果有相同部分返回1,如果沒有則返回0。方法是先將整型數字轉換到陣列中,再判斷。 
函式為 int same(int num)其中num是輸入的整型數字

#include <iostream>

#include <vector>

using namespace std;

 

int same(int num){

vector

<int> temp;

while (num != 0)

{

int tempNum = num % 10;

temp.push_back(tempNum);

num = num / 10;

}

 

if (temp.size() <= 1)

{

return 0;

}

 

for (auto begin = temp.rbegin(), end = temp.rend(), ahead = begin + 1; begin != end; begin++)

{

while (ahead + 1 != end)

{

if (*ahead != *begin)

{

ahead++;

continue;

}

if (*(ahead + 1) == *(begin + 1))

{

return 1;

}

ahead++;

}

}

return 0;

}

 

int main()

{

int num;

cin >> num;

cout << same(num) << endl;

 

system("pause");

return 0;

}

、字串乘積

#include <stdio.h>

#include <iostream>

using namespace std;

 

void mul(char *input1, int n, char *input2, int m, char *output){

long long num1 = 0, num2 = 0;

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

{

num1 += (input1[i] - '0') * pow(10, n - i - 1);

}

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

{

num2 += (input2[i] - '0') * pow(10, m - i - 1);

}

 

long long num3 = num1 * num2;

char *p = output;

while (num3 != 0)

{

*p++ = num3 % 10 + '0';

num3 /= 10;

}

*p = '\0';

 

int length = strlen(output);

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

{

int temp = output[i];

output[i] = output[length - i - 1];

output[length - i - 1] = temp;

}

}

 

int main()

{

char in1[10], in2[10], out[10];

cin >> in1 >> in2;

mul(in1, strlen(in1), in2, strlen(in2), out);

cout << out << endl;

 

system("pause");

return 0;

}

四、麻將番數
麻將遊戲越來越受到大家喜愛,也在網路上盛行。本題目是給定一組已經和牌的麻將,編寫一個函式計算這組麻將的番數。為簡化題目,假設麻將只有筒子和條子兩種花型,能翻番的規則也只有以下三種,當一組牌中沒有下述三種情況中的一種或多種,則這組牌為0番,每種番數是加的關係,例如一組牌既有卡2條又有四歸一,則番數為3番。 
1.2條為一番,即有一局牌是 123條; 
2.四歸一為兩番,即有4張一樣的牌(花色和數字都一樣) 
3.巧七對為兩番,即一組牌恰好是7對牌; 
一些約定: 
1.一組已經和牌的麻將由多局牌組成,一局牌可以是一對牌、3張連續同樣花色的牌、3張一樣的牌、4張一樣的牌。 
2.一組已經和牌一般有14張牌,最多可以有18張牌(當有四歸一的時候) 
一字串表示已經和牌的麻將(由輸入者保證,程式設計人員無需考慮沒有和牌),如1T2T3T,4T5T6T,7T8T9T,1D2D3D,4D4D. 
說明: 
1.”1T”表示1條,T表示條子,前面跟數字幾表示幾條,資料範圍19,輸入者保證,程式設計無需考慮輸入規範性
2.”4D”表示4筒,D表示筒子,前面跟數字幾表示幾筒,資料範圍是19, 輸入者保證,程式設計無需考慮輸入規範性
3.每局牌之間由’,’隔開,輸入者保證每局牌都是正確的且按照數字由小到大排序,程式設計人員無需判斷每局牌的正確性; 
4.一組牌以’.’號結束,由輸入者保證,程式設計人員無需考慮是否有”.”號。 
5.輸入保證有番數的牌在一局中,程式設計人員無需考慮排序,即有番數的牌不會分散在多局牌中。 
輸出
麻將的番數,整型型別。 
樣例輸入: 1T2T3T,4T5T6T,7T8T9T,1D2D3D,4D4D. 
樣例輸出: 1 

#include<iostream>

#include<string>

 

using namespace std;

 

int main()

{

char ch[42];

 

int gang_count = 0;

int three_same_count = 0;

int ka_2_tiao_count = 0;

int fan_count = 0;

 

while (cin >> ch)

{

int length = strlen(ch);

 

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

{

if (ch[i] <= '9' && ch[i] >= '1')

{

if (ch[i] == ch[i + 2] && ch[i + 2] == ch[i + 4] && ch[i + 4] == ch[i + 6] && (ch[i + 8] == ',' || ch[i + 8] == '.'))

gang_count++;

else if ((ch[i] == ch[0] || ch[i - 1] == ',') && ch[i] == ch[i + 2] && ch[i + 2] == ch[i + 4] && (ch[i + 6] == ',' || ch[i + 6] == '.'))

three_same_count++;

else if (ch[i] + 1 == ch[i + 2] && ch[i + 2] + 1 == ch[i + 4] && (ch[i + 6] == ',' || ch[i + 6] == '.'))

{

if (ch[i] == '1'&&ch[i + 1] == 'T')

ka_2_tiao_count++;

}

}

}

 

if (ka_2_tiao_count || three_same_count || gang_count == 4)

fan_count = ka_2_tiao_count * 1 + gang_count * 2;

else

fan_count = 2 + gang_count * 2;

 

cout << fan_count << endl;

}

 

return 0;

}