欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

华为机试题整理

程序员文章站 2024-03-15 17:37:30
...

1、整数反转后求和

华为机试题整理

#include <iostream>
using namespace  std;
int reversenum(int x)
{
    int a=0;
    while (x>0) {
        a=a*10+x%10;
        x/=10;
    }
    return  a;
}
int reverseAdd(int a,int b)
{
    if(a<1||a>70000||b<1||b>70000){
        return -1;
    }
    int num1=reversenum(a);
    int num2=reversenum(b);
    int sum=num1+num2;
    return sum;
}

int main()
{
   int x;
   int y;
   cin>>x>>y;
   int sum=reverseAdd(x,y);
   cout<<sum;
   return  0;
}

2.深度优先遍历(DFS他娘的现在和动态规划变成热门)

华为机试题整理

华为机试题整理 

  

 

#include <iostream>
#include <vector>
using namespace  std;
const int inf= 0x7f7f7f7f;
//时间花费矩阵
int a[][7]={
    {0},
        {0, 0, 2, 10, 5, 3, -1},
        {0, -1, 0, 12, -1, -1, 10},
        {0, -1, -1, 0, -1, 7, -1},
        {0, 2, -1, -1, 0, 2, -1},
        {0, 4, -1, -1, 1, 0, -1},
        {0, 3, -1, 1, 0, 2, 0}
};
int x,y;//目的地,大雾城市
int res;
int used[10];//record falg
int d[50];//记录路
int haveded[50];//走过的路
int anscost=inf;
int anspath;
/*====出发地,花费时间,路径个数=====*/
void dfs(int now,int cost,int path)
{
 if(now==x){
     if(cost<anscost){
         anscost=cost;
         for(int i=0;i<path;i++){
             haveded[i]=d[i];
         }
         anspath=path;
     }
     return;
 }
 for(int i=1;i<=6;i++){
     if(i==y){
         continue;
     }
     if(used[i]==0&&a[now][i]>=0){
         used[i]=1;
         d[path]=i;
         dfs(i,cost+a[now][i],path+1);
         used[i]=0;
     }
 }
}
int main()
{
    static char emp[] = "";
    static char col[] = ", ";
    cin>>x>>y;//出差城市,大雾城市

    if (x == 5)
    {
        cout<<"0\n[]\n";
        return 0;//出差为5的话,0不可达
    }
    if (y == 5)
    {
        cout<<"1000\n[]\n";
        return 0;//大雾为5的话,1000不可达
    }

    d[0] = 5;
    used[5] = 1;

    dfs(5, 0, 1);//核心算法

    char *p = emp;
    if (anscost == inf)
    {
        printf("1000\n[]\n");
    }
    else
    {
        cout<<anscost<<"\n[";
        for (int i = 0; i < anspath; i++)
        {
            cout<<p<<haveded[i];
          p = col;
        }
        printf("]\n");
      }
  return 0;
}

 

 3.

题目描述

请设计一个算法完成两个超长正整数的加法。

输入描述:

输入两个字符串数字

输出描述:

输出相加后的结果,string型

#include<iostream>
#include <string>
#include <algorithm>
using namespace  std;

int main()
{
    string a;
    string b;
    cin>>a>>b;
    int n1=a.size();
    int n2=b.size();
    string x,y;
    for(int i=0;i<n1;i++){
        x[i]=a[n1-1-i];
    }
    for(int i=0;i<n2;i++){
        y[i]=b[n2-1-i];
    }

    if(n1<n2){
        for(int i=n1;i<n2;i++){
            x[i]='0';
        }

    }else{
       for(int i=n2;i<n1;i++){
            y[i]='0';
       }
    }
    int sum[100];
    int carry=0;
    int n=max(n1,n2);
    for(int i=0;i<n;i++){
        int c=x[i]-48+y[i]-48+carry;
        if(c<10){
            sum[i]=c;
            carry=0;
        }else{
          sum[i]=c-10;
          carry=1;
        }
    }
    if(carry==1){
        sum[n]=1;
        n=n+1;
    }
//    for(int j=0;j<n;j++)
//         cout<<sum[n-1-j];
//     cout<<endl;
    string res[100];
    for(int j=0;j<n;j++){
        res[j]=sum[n-1-j]+'0';

    }
    for(int j=0;j<n;j++){
        cout<<res[j];
    }
    cout<<endl;
    return 0;
}

4. 

 

输入描述:

输入一个字符串。

输出描述:

输出字符串中最长的数字字符串和它的长度。如果有相同长度的串,则要一块儿输出,但是长度还是一串的长度

示例1

输入

abcd12345ed125ss123058789

输出

123058789,9
#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main()
{
    string str;

    while(cin>>str)
    {
        string tmp;
        vector<string> arr;

        for(int i=0;i<=str.length();i++)
        {
            if(str[i]>='0' && str[i]<='9')
            {
                tmp+=str[i];
            }
            else
            {
                if(tmp.length()!=0)
                {
                    arr.push_back(tmp);
                }
                tmp.clear();
            }
        }

        int max=0;
        int length=0;

        for(int i=0;i<arr.size();i++)
        {
            if(max<(arr[i]).length())
            {
                max=(arr[i]).length();
                length=max;
            }
        }

        for(int i=0;i<arr.size();i++)
        {
            if(max==(arr[i]).length())
            {
                cout<<arr[i]<<" ";
            }

        }
        cout<<","<<length<<endl;
    }
    return 0;
}

 5.计算1的的个数

int countInnums(int iNum){
    int iCount=0;
    iNum=abs(iNum);
    while(iNum){
        iCount++;
        iNum=iNum&(iNum-1);
    }
    return iCount;
}