华为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;

}

 

猜你喜欢

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