1. 程式人生 > >華為機試——2018年校招

華為機試——2018年校招

10號參加的華為的機試,這次的3道題難度適中。第一題字串,第二題貪心演算法,dp可以解,第三題長整數相乘。因為題主做過第三題原題,剛開始就把第三題秒了~~

然後開始做第一題,一般10分鐘就可以搞定。第二題要想一下,不過也差不多是原題,Leetcode上第55題jump game應該是此題原型。

因為都刷過幾乎是原題的原故,一個小時不到3題就AC完了

下面是完整題目和程式碼

一.給你一個原始字串,根據該字串內每個字元出現的次數,按照ASCII碼遞增順序重新調整輸出。

舉例!假設原始字串為

eeefgghhh

則每種字元出現的次數分別是

1.eee 3次   2.f 1次   3.gg 1次 4.hhh 3次

重新排序後輸出的字串如下:

efghegheh

編寫程式,實現上述功能。

【溫馨提示】

1.原始字串中僅可能出現“數字”和“字母”;

2.請注意區分字母大小寫。

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    string str;
    int a[128]={0};
    while (cin >> str){
        for(int i=0;i<str.length();i++){
            a[str[i]]++;
        }                                                    //caculate the number of each character
        int max = *max_element(a, a+128);
        sort(str.begin(),str.end());
        long i =unique(str.begin(), str.end()) - str.begin();//the location of the "maxium number" character 
        str=str.substr(0,i);
        for(int j=0;j<max;j++)
        for(int i=0;i<str.length();i++){
            if(a[str[i]]){
                cout<<str[i];
                a[str[i]]--;
            }
        }
        cout <<endl;
    }
    
    return 0;
}

二、給出一組正整數,你從第一個數向最後一個數方向跳躍,每次至少跳躍1格,每個數字的值表示你這個位置可以跳躍的最大長度。計算如何以最少的跳躍次數跳到最後一個數。

輸入描述:

第一行表示有多少個數n

第二行依次是1到n,一個數一行。

輸出描述:

輸出一行,表示跳躍最少的次數

#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
//確定起點後,用一個指標指向最大跳躍點。    
//搜尋最大跳躍點與起點之間能往後走的最遠的點,選定該點為起點,其最大跳躍點為終點。重複。
#define MAX 1000
using namespace std;            //每次跳的最大長度為a[i]+i。
        if(a[i] + i > stepMax){ //搜尋最大的跳躍點,記為index
            stepMax = a[i] +i;
            index =i;
        }
        if(i == end){            //搜尋完畢,從index(能跳最遠的位置)開始繼續跳
            end = stepMax;
            ++count;
            i = index;
        }
    }
    return count;
}

int main()
{
    int n;
    while (cin >> n){
        int a[MAX]={0};
        for(int i=0;i<n;i++){
            cin >> a[i];
        }
        cout <<jump(a, n);
    }
    
}

二、編寫“常證書相乘”的程式,實現兩個任意長度的長整數(正數)相乘,輸出結果

這題就不多逼逼了,網上多的是答案。

#include<iostream>
using namespace std;



int multiply (string ma,string mb,string &strRst)
{
    
    string chengshuA = ma;
    string chengshuB = mb;
    unsigned long a = chengshuA.length();
    unsigned long b = chengshuB.length();
    int strRst_length = 0;
    unsigned long c = (a+1)*(b+1);
    int *p = new int[c];
    int *pA = new int[a];
    int *pB = new int[b];
    
    
    if ((a == 0) || (b == 0))
        return -1;
    
    for (int i = 0; i != c; i++)
        p[i] = 0;
    
    
    for (string::size_type index = 0; index !=  chengshuA.length(); index++)
        pA[a-1-index] = chengshuA.at(index) - '0';
    
    
    for (string::size_type index = 0; index != chengshuB.length(); index++)
        pB[b-1-index] = chengshuB.at(index) - '0';
    
    
    for (int temp_b = 0; temp_b != b; temp_b++)
    {
        for (int temp_a = 0; temp_a != a; temp_a++)
        {
            
            int temp = p[temp_a+temp_b] + pA[temp_a]*pB[temp_b];
            p[temp_a+temp_b] = temp % 10;
            int carry = temp/10;
            
            int x = temp_a + temp_b +1;
            
            while(carry != 0)
            {
                p[x] = p[x] + carry%10;
                carry = carry/10;
                x++;
            }
        }
    }
    
    while (c-- > 0)
    {
        if (p[c] != 0)
        {
            strRst_length = c + 1;
            break;
        }
    }
    
    char ch;
    for (int i = strRst_length - 1; i >= 0 ; i--)
    {
        ch = p[i] + '0';
        strRst.push_back(ch);
    }
    if (strRst.empty())
    {
        strRst = "0";
    }
    
    return 0;
}

int main(void)
{
    string a ;
    string b ;
    while (cin >> a>>b){
        string strRst = "\0";
        multiply (a,b,strRst);
        cout << strRst<<endl;
    }
    return 0;
}

相關推薦

——2018

10號參加的華為的機試,這次的3道題難度適中。第一題字串,第二題貪心演算法,dp可以解,第三題長整數相乘。因為題主做過第三題原題,剛開始就把第三題秒了~~然後開始做第一題,一般10分鐘就可以搞定。第二題要想一下,不過也差不多是原題,Leetcode上第55題jump game

2016題目回憶1

題目一:根據指定的分隔符分隔字串,並輸出指定的段 描述 根據指定的分隔符分隔字串,並輸出指定的段。如果指定的段超過分隔的段數,輸出:NULL 舉例: AAA?BBB?CCC??2 字串為:AAA?BBB?CCC? 分隔符為:? 指定的段為:2

20185月3日)

第一題 :                                C++程式:#include<iostream> #include<string> using namespace std; void main() { string str,

[練習題]2.大數求和

cout views 華為上機 大數 高位到低位 pretty 類別 ade iostream 題目二[大數求和] 描寫敘述: 給定兩個非常大的正整數A和B。位數在50至100之間。求C=A+B; 題目類別: 字符串 難度: 中級

2014(一)

ack cpp string.h ont const 機試題 輸出字符串 abcd 函數 2014華為機試(一)/****************************************************************************

-字符串匹配

輸入 scanner i++ -m 實現 ret 字符 als num 題目描述 題目標題: 判斷短字符串中的所有字符是否在長字符串中全部出現 詳細描述: 接口說明 原型: boolIsAllCharExist(char* pShortString,char* pLo

-密碼強度等級

java程序 strong while oid ont || ascii wds tro 題目描述 密碼按如下規則進行計分,並根據不同的得分為密碼進行安全等級劃分。 一、密碼長度: 5 分: 小於等於4 個字符 10 分: 5 到

[練習題]56.求子數組的最大和

== process ack turn 多個 popu 基礎 ace ava 題目 描寫敘述: 輸入一個整形數組。數組中連續的一個或多個整數組成一個子數組,每一個子數組都有一個和。求全部子數組的和的最大值。 接口 Int GetSub

—變形的楊輝三角形

mar ios alt mark word http processor string tex 變形的楊輝三角形 每一個數是上行,左右3個數之和,不存在為0,求第n行第一個偶數出現的位置,沒有輸出-1。 #include<iostrea

】找最高分(通過此題熟悉牛客網Node輸入輸出)

length 輸出 ons ken [0 接下來 lin tput int 來源:牛客網 老師想知道從某某同學當中,分數最高的是多少,現在請你編程模擬老師的詢問。當然,老師有時候需要更新某位同學的成績. 輸入描述: 輸入包括多組測試數據。每組輸入第一行是兩個正整數N和M(0

:字串的連接最長路徑查找

too 小寫 while arrays 空間 i++ har cap over 這個題更應該叫做字符串字典序排序 題目描述 給定n個字符串,請對n個字符串按照字典序排列。 輸入描述: 輸入第一行為一個正整數n(1≤n≤1000),下面n行為n個字符串

:汽水瓶

方法 new code imp subject tint 表示 next quest 題目描述 有這樣一道智力題:“某商店規定:三個空汽水瓶可以換一瓶汽水。小張手上有十個空汽水瓶,她最多可以換多少瓶汽水喝?”答案是5瓶,方法如下:先用9個空

】—— 6.質數因子

string ner out system pre 分享 args 機試 分享圖片 題目 解法 import java.util.Scanner; public class Main { public static void main(Strin

練習

ace tor 排序 技術分享 length a-z string it! 計算 1. 計算字符個數 輸入 ABCDEF A 輸出 1 #include <iostream> #include <cstring> using n

提取不重復的整數

des back 重復 mes 提取 push_back pan i++ -h 題目描述 輸入一個int型整數,按照從右向左的閱讀順序,返回一個不含重復數字的新的整數。 輸入描述: 輸入一個int型整數 輸出描述: 按照從右向左的閱讀順序,返回一個不含重復數字的新的整

牛客網 - 線上程式設計 - - 合併表記錄

題目描述 資料表記錄包含表索引和數值,請對錶索引相同的記錄進行合併,即將相同索引的數值進行求和運算,輸出按照key值升序進行輸出。 輸入描述: 先輸入鍵值對的個數 然後輸入成對的index和value值,以空格隔開 輸出描述: 輸出合併後的鍵值對(多

牛客網 - 線上程式設計 - - 字串字典順序排序

題目描述 給定n個字串,請對n個字串按照字典序排列。 輸入描述: 輸入第一行為一個正整數n(1≤n≤1000),下面n行為n個字串(字串長度≤100),字串中只含有大小寫字母。 輸出描述: 資料輸出n行,輸出結果為按照字典序排列的字串。 示例1

牛客網 - 線上程式設計 - - 刪除字串中出現次數最少的字元

題目描述 實現刪除字串中出現次數最少的字元,若多個字元出現次數一樣,則都刪除。輸出刪除這些單詞後的字串,字串中其它字元保持原來的順序。 輸入描述: 字串只包含小寫英文字母, 不考慮非法輸入,輸入的字串長度小於等於20個位元組。 輸出描述: 刪除字串中出現

牛客網 - 線上程式設計 - - 單詞倒排

題目描述 對字串中的所有單詞進行倒排。 說明: 1、每個單詞是以26個大寫或小寫英文字母構成; 2、非構成單詞的字元均視為單詞間隔符; 3、要求倒排後的單詞間隔符以一個空格表示;如果原字串中相鄰單詞間有多個間隔符時,倒排轉換後也只允許出現一個空格間隔符; 4、每個單詞最

牛客網 - 線上程式設計 - - 字串處理

題目描述 按照指定規則對輸入的字串進行處理。 詳細描述: 將輸入的兩個字串合併。 對合並後的字串進行排序,要求為:下標為奇數的字元和下標為偶數的字元分別從小到大排序。這裡的下標意思是字元在字串中的位置。 對排序後的字串進行操作,如果字元為‘0’——‘9’或者‘A’——‘F’