1. 程式人生 > >華為歷年機考題收錄

華為歷年機考題收錄

1 前言

華為每年(實習生和校招)的筆試題一般都是三道程式設計題。大約是因為華為體量太大,崗位太多,如果每個崗位都針對性出題目,成本也高。

總的來說,華為的機考題還是比較簡單。(即使對於我這樣偶爾寫寫leetcode的前端開發者也是如此。)華為宣講會的主持人也坦誠機考只要通過一道,華為就給面試的機會。

這篇文章用來收錄華為歷年的機考題。

2 2015-01

題目:

第一題(60分):
​ 按要求分解字串,輸入兩個數M,N;M代表輸入的M串字串,N代表輸出的每串字串的位數,不夠補0。例如:輸入2,8, “abc” ,“123456789”,則輸出為“abc00000”,“12345678“,”90000000”

//思路:遞迴
#include<iostream>
#include<string>
using namespace std;
void dfs(string a,int n) {
    if (a.length() <= n) { //如果字串長度不夠,補0,直接輸出
        cout << a;
        for (int i = 0; i < n - a.length(); i++) { 
            cout << '0';
        }
        cout << endl;
    }
    else
{ // 長度超出,截斷字串 cout << a.substr(0, n) << endl; dfs(a.substr(n), n); //遞迴字串其餘的內容 } } int main() { int m,n; cin >> m >> n; string a;//輸入的字串 for (int i = 0; i < m; i++) { cin >> a; dfs(a,n); //遞迴 } }

3 2015-02

題目:

第二題:去除重複字元並排序

執行時間限制:無限制

內容限制: 無限制

輸入: 字串

輸出: 去除重複字元並排序的字串

樣例輸入: aabcdefff

樣例輸出: abcdef

//思路:先排序後去重
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {
    string s;
    cin >> s;
    sort(s.begin(), s.end());//先排序
    if (s.length() == 0) return 0;
    for (int i = 1; i < s.length(); i++) {
        if (s[i] == s[i-1]) { 
            s.erase(i,1);//去重
            i--;
        }
    }
    cout << s;

}

4 2015-03

題目:

第三題:等式變換
輸入一個正整數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
樣例輸出:21

//動態規劃
//動態方程(有點難理解):當前種類=符號位加號+符號為減號+沒有符號的種類
//dp(before,des,n,ex)= dp(before - 1, before, res + des,1) + dp(before - 1, before, res - des,1) + dp(before - 1, before*pow(10, ex)+des, res,ex+1);
// before: 需要判定的符號前面的數字的個數,初始為8
// des: 需要判定的符號後面的數字,初始為9
// n:方程右邊的結果
// ex:階乘數,因為符號有三種可能,加號,減號,或者沒有,如果沒有,那麼ex就用於計算當前值
#include<iostream>
#include<cmath>
using namespace std;
int dp(int before, int des, int res,int ex) {
    if (before == 0) {
        if (des == res) {
            return 1;
        }
        else {
            return 0;
        }
    }
    else {
        return dp(before - 1, before, res + des,1) + dp(before - 1, before, res - des,1) + dp(before - 1, before*pow(10, ex)+des, res,ex+1);
    }
}
int main(){
    int n; cin >> n;
    cout << dp(8,9,n,1);

}

5 2018-01

/* 
括號匹配 

給定一個字串,裡邊可能包含“()”、“[]”、“{}”三種括號,請編寫程式檢查該字串中的括號是否成對出現,且巢狀關係正確。 
輸出:true:若括號成對出現且巢狀關係正確,或該字串中無括號字元; 
false:若未正確使用括號字元。 
實現時,無需考慮非法輸入。 

輸入描述: 
輸入為: 
字串 

例子:(1+2)/(0.5+1) 

輸出描述: 
輸出為: 
字串 

例子:true 
*/ 
/*
思路:棧
遇到左符號,則壓入,遇到右符號,彈出頂層的符號和右符號比對,如果符合,則繼續,
否則輸出false
*/ 
#include <iostream>
#include <vector>
#include <string>
using  namespace std;

int whatType(char ch){
    if(ch=='['||ch=='{'||ch=='('){
        return -1;
    }else if(ch==']'||ch=='}'||ch==')'){
        return 1;
    }else{
        return 0;
    }
}
int ifFit(char a,char b){
    if(a=='{'&&b=='}') return 1;
    if(a=='['&&b==']') return 1;
    if(a=='('&&b==')') return 1;
    return 0;
}

int main() {
    vector<char> characters;
    string a;
    cin>>a;
    for (int i = 0; i < a.length(); ++i) {
        if(whatType(a[i])==-1){
            characters.push_back(a[i]);
        }else if(whatType(a[i])==1){
            if(characters.empty()){
              cout<<"false";return 0;
            }else{
                if(ifFit(characters[characters.size()-1],a[i])==0){
                    cout<<"false";return 0;
                }else{
                    characters.pop_back();
                }
            }
        }
    }
    cout<<"true";
    return 0;
}

6 2018-02

/* 
平安果 

簡要描述: 
給定一個M行N列的矩陣(M*N個格子),每個格子中放著一定數量的平安果。 
你從左上角的各自開始,只能向下或者向右走,目的地是右下角的格子。 
每走過一個格子,就把格子上的平安果都收集起來。求你最多能收集到多少平安果。 
注意:當經過一個格子時,需要一次性把格子裡的平安果都拿走。 
限制條件:1<N,M<=50;每個格子裡的平安果數量是0到1000(包含0和1000). 

輸入描述: 
輸入包含兩部分: 
第一行M, N 
接下來M行,包含N個平安果數量 

輸出描述: 
一個整數 
最多拿走的平安果的數量 

示例: 

輸入 
2 4 
1 2 3 40 
6 7 8 90 

輸出 
136 
*/  
/*
思路:動態規劃
動態方程:當前位置能夠獲得的最大蘋果數=max(從上面走能夠獲得最大蘋果+從左邊走能獲得最大蘋果)
dp(0,0)=app[0][0]
*/


#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
int dp(int m, int n,int apple[][50]) {
    if (m == 0 && n == 0) {
        return apple[0][0];
    }
    else if (m == 0) {
        return apple[m][n] + dp(m, n - 1, apple);
    }
    else if (n == 0) {
        return apple[m][n] + dp(m-1,n,apple);
    }
    else {
        return max(apple[m][n] + dp(m, n - 1, apple), apple[m][n] + dp(m - 1, n, apple));
    }
}

int main() {
    //freopen("C:\\Users\\zhagshichao\\Desktop\\in.txt","r",stdin);
    int m, n; cin >> m >> n;
    int apple[50][50];

    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            int tmp; cin >> tmp;
            apple[i][j] = tmp;
        }
    }

    cout<<dp(1, 3,apple);

}

如有錯誤,還望指正。

以上。

相關推薦

歷年考題收錄

1 前言 華為每年(實習生和校招)的筆試題一般都是三道程式設計題。大約是因為華為體量太大,崗位太多,如果每個崗位都針對性出題目,成本也高。 總的來說,華為的機考題還是比較簡單。(即使對於我這樣偶爾寫寫leetcode的前端開發者也是如此。)華為宣講會的主持人

歷年筆試面試考試題1——數字顛倒,字串反轉

數字顛倒和字串反轉是一類題目,本質上是一樣的,所以可以放到一起來講。 題目描述 數字顛倒 輸入一個整數,將這個整數以字串的形式逆序輸出 程式不考慮負數的情況,若數字含有0,則逆序形式也含有

2017試題

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

2018試題

2018 1.數字處理 題目描述:給出一個不多於5位的整數,進行反序處理,要求 (1)求出它是幾位數 (2)分別輸出每一個數字(空格隔開) (3)按逆序輸出各位數字(僅數字間以空格間隔,負號與數字之間不需要間隔) 輸入描述:位數不大於5的整數 輸出描述:1.整數位數 2.

2016試題

奇偶排序 輸入一串用空格隔開的數字串,對於數字串的奇數位按升序排序,偶數位按降序排序. 示例輸入:4 6 2 3 6 7 8 1 處理過程: 奇數位:4 2 6 8 升序排序結果: 2 4 6 8 偶數位:6 3 7 1 降序排序結果: 7 6 3 1 #in

2015試題

一、字串分解 按要求分解字串,輸入兩個數M,N;M代表輸入的M串字串,N代表輸出的每串字串的位數,不夠補0。例如:輸入2,8, “abc” ,“123456789”,則輸出為“abc00000”,“12345678“,”90000000” 分析思路: 容易題 1.獲

2014試題

一、過濾重複字元通過鍵盤輸入一串小寫字母(a~z)組成的字串。請編寫一個字串過濾程式,若字串中出現多個相同的字元,將非首次出現的字元過濾掉。比如字串“abacacde”過濾結果為“abcde”。 要求實現函式:void stringFilter(const char *pInputStr, lo

2013試題

一、刪除子串1、題目描述:只要是原串中有相同的子串就刪掉,不管有多少個,返回子串的個數。2、題目分析:我們對比該題與《HWOJ 在一個字元中刪除第二個字元出現過的所有字元》《HWOJ 實現一個聽高階的字元匹配演算法》都是不一樣的。一定要注意區分所以我們這道題不適合用雜湊表來完成。我們可以利用指標來完

解決Android studio執行LogCat日誌不斷輸出問題

這個暑假我剛開始學習安卓開發,我用的是真機除錯,專案能正常執行,但是Logcat卻不斷輸出日誌,這嚴重影響了我檢視自己列印的日誌,所以誓要解決這問題,於是我經過百度和自己的摸索,得出如下兩個解決辦法: 1.用LogCat列印日誌,message里加上字首用以標識,然後在logCat裡用搜索字首內

尋找01矩陣中的最大子矩陣--OJ試--java語言版

題目描述: 在一個M * N的矩陣中,所有的元素只有0和1,從這個矩陣中找出一個面積最大的全1子矩陣,所謂最大是指元素1的個數最多。 輸入: 輸入可能包含多個測試樣例。 對於每個測試案例,輸入的第一行

一道試題

同學最近找工作,遇到了一個機試題,咋一看感覺很簡單,後來做了一下,才發現裡面考察了很多東西,如字串的操作,大數的計算等等.... 廢話不說,直接上題目 1、程式實現目標:輸入1~20的數字n,求n以內資料的階乘之和。 1! + 2! + 3! +......+n! = ?

【演算法】列印順序——2017招聘試題

某個印表機根據列印佇列執行列印任務。列印任務分為九個優先順序,分別採用數字1~9表示,數字越大優先順序越高。印表機每次從佇列頭部取出第一個任務A,然後檢查佇列餘下任務中有沒有比A優先順序更高的任務,如果有比A優先順序高的任務,則將任務A放到佇列尾部,否則執行任務A的列印。請編

2016試題目03

題目描述如下: 開發一個簡單錯誤記錄功能小模組,能夠記錄出錯的程式碼所在的檔名稱和行號。 處理:1.記錄最多8條錯誤記錄,對相同的錯誤記錄(即檔名稱和行號完全匹配)只記錄一條,錯誤計數增加;(檔案所在的目錄不同,檔名和行號相同也要合併)2.超過16個字元的檔名稱,只記錄檔案

Android在測試無法輸出Log.d的解決辦法

在真機測試時想輸出Log.d但是沒反應,試了Log.i就有,很苦惱困惑,找了許多資料後解決辦法如下: 撥號盤輸入: *#*#2846579#*#* 點選ProjectMenu(也可能是系統選單)--->後臺設定---->LOG設定--->LOG開關 開啟重

2015試--記錄出錯的程式碼所在的檔名稱和行號

我沒機會參加今年華為的提前招聘(都不知道有這個渠道)題目如下: 開發一個簡單錯誤記錄功能小模組,能夠記錄出錯的程式碼坐在的檔名稱和行號。 處理: 1.記錄最多8條錯誤記錄,對相同的錯誤記錄(即檔名稱和行號完全匹配)只記錄一條,錯誤計數增加; (檔案所在的目錄不同,檔名和行號

Java試題__轉載

轉載http://blog.csdn.net/xcbeyond/article/details/45627247 1.程式實現目標: 輸入一個字串,將其各個字元對應的ASCII值加5後,輸出結果。     程式要求:該字串只包含小寫字母,若其值加5

摺疊皇突然上架淘寶:價格驚人

6月14日訊息,華為Mate X通過3C認證,距離上市更近了。目前官方尚未公佈Mate X發售時間,令人意外的是淘寶第三方店鋪已經

(考題)通過鍵盤輸入100以內正整數的加、減運算式,請編寫一個程式輸出運算結果字串。

#include <stdio.h> #include <stdlib.h> void add1(char *p1,int p2){int i,j;int a,b,sign;i=0;a=p1[i]-'0';i++;while(p1[i]!=' '){

到金立 為何尷尬的總是國產高端

聯發科 國產手機 臺灣經濟 處理器 供應鏈 據臺灣經濟日報報道稱,全球首款十核處理器聯發科X20目前的處境頗為不妙。作為聯發科旗下被寄希望與高通驍龍8XX系列對飈的X20處理器,卻有著數百萬顆尚未出貨,這讓聯發科受到較大的清倉壓力。雖然聯發科對此一再否認,但似乎已經是不爭的事實。而之所以旗

部分真調試無法顯示log問題解決

方式 輸入 project class log 重新 pro logcat clip 真機測試時,部分華為手機無法獲取所有的log信息。或者說無法獲取Error下面級別的log信息。比方P7 這是由於部分華為機出廠默認log設置為關閉狀態。因此僅僅能獲取Error以上級