华为武长区笔试2017

来源:互联网 发布:免费服务器防火墙软件 编辑:程序博客网 时间:2024/06/04 00:31

题目1描述

请您写一个reverseAdd函数,该函数根据输入的两个正整数a和b,然后分别将它们的数字按照高位在右边的方式反转后求和。
例如,reverseAdd(123,456)==321+654 ==975

输入描述

函数原型:int reverseAdd(int a,int b);输入:输入的a,b参数均为有效取值范围[1,70000]区间上的正整数。100和200反转后的值为1和2(前导0被忽略)

输入例子

123,456 结果: 975

题意解析

此题的关键之处,在于对输入的数进行反转输出。
假如输入一个 123,可看出123=100+20+3,我们要求得到
321=300+20+1;
首先把3分离出来 result = 123 % 3 ;当分离出3后,应该前进一位,即,12=123/10;然后继续分离。
实际演化过程为:
3->30->32->320->321.分离后发现是个循环累加的过程。

处理的代码如下:

int void reverseint a){    int result=0;    while(a){        result += a%10;        result *=10;        a/=10;    }    return result/10;}

注意:result 最后多乘了10,最后得除去。

此题的完整代码(C++):

#include <iostream>using namespace std;int reverseAdd(int a,int b){        int result=0;        int result_A=0;        int result_B=0;        if(a<1||a>70000||b<1||b>70000){            return -1;        }else{            while(a){                result_A+=a%10;                result_A*=10;                a/=10;            }            while(b){                result_B+=b%10;                result_B*=10;                b/=10;            }            return (result_A+result_B)/10;        }    }int main() {    int a,b;    char c;    while(cin>>a>>c>>b){        cout<<reverseAdd(a,b)<<endl;    }}

注:输入123,456 中间有个逗号,是个坑,我是通过定义一个字符来处理,若有你更好方法,欢迎交流 :-D


题目2描述

骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置到平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向后翻转1次),可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示顺时针旋转90度),现从初始状态开始,根据输入的动作序列,计算得到最终的状态。

输入描述

初始状态为: 123456输入只包含LRFBAC的字母序列,最大长度为50,可重复

输入例子

RA结果: 436512

题意解析

此题的关键之处,是对不同的翻转或旋转,判断数组中元素位置的互调。

注意:左翻或右翻,前后位置不变,前翻或后翻,左右位置不变,旋转上下不变。

此题的完整代码(C++):

#include<iostream>using namespace std;int main(){    string fz;    int arr[6]={1,2,3,4,5,6};    int i,j;    int temp1,temp2;    cin>>fz;    for(i=0;i<fz.size();i++){        if(fz[i]=='R'){            temp1=arr[5];            arr[5]=arr[1];            arr[1]=temp1;            temp2=arr[4];            arr[4]=arr[0];            arr[0]=temp2;        }        if(fz[i]=='L'){            temp1=arr[5];            arr[5]=arr[0];            arr[0]=temp1;            temp2=arr[4];            arr[4]=arr[1];            arr[1]=temp2;        }        if(fz[i]=='F'){            temp1=arr[5];            arr[5]=arr[3];            arr[3]=temp1;            temp2=arr[4];            arr[4]=arr[2];            arr[2]=temp2;        }        if(fz[i]=='B'){            temp1=arr[5];            arr[5]=arr[2];            arr[2]=temp1;            temp2=arr[4];            arr[4]=arr[3];            arr[3]=temp2;        }        if(fz[i]=='A'){            temp1=arr[3];            arr[3]=arr[0];            arr[0]=temp1;            temp2=arr[2];            arr[2]=arr[1];            arr[1]=temp2;        }        if(fz[i]=='C'){            temp1=arr[2];            arr[2]=arr[0];            arr[0]=temp1;            temp2=arr[3];            arr[3]=arr[1];            arr[1]=temp2;        }    }    for(j=0;j<6;j++){        cout<<arr[j];    }}

注:可用switch进行控制。关键在于使用什么样的数据结构,这里采用数组。


题目3描述

小K是X区域的销售经理,他平时常驻“5”城市,并且经常要到“1”,“2”,“3”,“4”,“6”城市出差。当机场出现大雾情况时,会导致对应城市的所有航班的起飞及降落均停止(即不能从该城市出发,其他城市也不能到达该城市)。小K希望知道如果他需要到X城市出差时,如果遇到Y城市出现大雾,他最短的飞行时间及飞行路径。
注意:当两个城市间不可达时,消耗时间默认取1000.各城市间的飞行时间如下表所示,加粗列代表始发城市,加粗行代表终点城市,矩阵中的值代表从始发城市飞行到终点城市所耗时间(单位小时),M代表不可达(注意飞行线路是单向的,即A->B 不等于 B->A)
例如:
1)从1号城市飞行到4号城市花费5h,从4号城市飞到1号城市花费2h
2) 从5号城市飞行到3号城市不可达,从3号城市飞行到5号城市花费7h.

1 2 3 4 5 6
1 0h 2h 10h 5h 3h M
2 M 0h 12h M M 10h
3 M M 0h M 7h M
4 2h M M 0h 2h M
5 4h M M 1h 0h M
6 3h M 1h M 2h 0h

输入描述

输入出差城市X(X可为1,2,3,4,5,6)输入大雾城市Y(Y可为0,1,2,3,4,5,6,为0代表没有城市出现大雾)

输入例子

24

输出例子

6{5,1,2}

题意解析

此题的关键之处,占个位,后面补充。

注意:。

此题的完整代码(C++):


如有不妥当之处,请指出,谢谢:-D

0 1