華為上機題匯總(一)

來源:互聯網
上載者:User

標籤:

華為上機題匯總(一)

註:編譯環境為Visual Studio 2012,答案僅供參考。

目錄

  • 華為上機題匯總一
    • 目錄
    • 第一題
    • 第二題
    • 第三題
    • 第四題
    • 第五題

第一題

1.給定一個字串,把字串內的字母轉換成該字母的下一個字母,a換成b,z換成a,Z換成A,如aBf轉換成bCg,字串內的其他字元不改變,給定函數,編寫函數
void Stringchang(const char *input,char *output)
其中input是輸入字串,output是輸出字串

#include <stdio.h>#include <iostream>using namespace std;void  Stringchang(const char* input,char* output){    int length = strlen(input);    while (*input != ‘\0‘)    {        if ((*input < ‘z‘ && *input >= ‘a‘) || (*input < ‘Z‘ && *input >= ‘A‘))        {            *output++ = *input++ + 1;        }        else if (*input == ‘z‘ || *input == ‘Z‘)        {            *output++ = *input++ - 25;        }        else        {            *output++ = *input++;        }    }    *output = ‘\0‘;}int _tmain(int argc, _TCHAR* argv[]){    char in[100];    char out[100];    cin.getline(in,100);    Stringchang(in,out);    cout << out << endl;    return 0;}
第二題

2.求一個整型數字中有沒有相同的部分,例如12386123這個整型數字中相同的部分是123,相同的部分至少應該是2位元,如果有相同部分返回1,如果沒有則返回0。方法是先將整型數字轉換到數組中,再判斷。
函數為 int same(int num)
其中num是輸入的整型數字

#include <stdio.h>#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 _tmain(int argc, _TCHAR* argv[]){    int num;    cin >> num;    cout << same(num) << endl;    return 0;}
第三題

3.求兩個字串的乘積,結果存到字串中,例如字串一中存的“657891”,字串二中存的“521”,分別將字串中的字元轉換成整型數字,進行計算後,再轉換成字元類型儲存起來
函數為 void mul(char *input1,int n,char *input2, int m,char *output)
其中input1和input2是輸入,n是input1的長度,n2是input2的長度。Output是輸出

註:題目中要求字串中的字元轉換為整型數字,說明不考慮無法轉換即大數問題的情況。

#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 _tmain(int argc, _TCHAR* argv[]){    char in1[10], in2[10], out[10];    cin >> in1 >> in2 ;    mul(in1,strlen(in1),in2,strlen(in2),out);    cout << out << endl;    return 0;}

由於輸入的字串不一定都是數字,最好再增加一個全域變數用於表示輸入是否合法

第四題

4.刪除子串,只要是原串中有相同的子串就刪掉,不管有多少個,返回子串個數。

#include <stdio.h>#include <iostream>#include <string>using namespace std;int deleteSubstr(string &str,const string &sub){    int count = 0;    string::size_type length = sub.size();    if (str.size() < length)    {        return count;    }    string tempString;    auto begin = str.begin();    for (auto end = str.end();(end - begin) >= length;)    {        string tempSub(begin, begin + length);        if (tempSub == sub)        {            count++;            begin += length;            continue;        }        tempString.push_back(*begin++);    }    while (begin != str.end())    {        tempString.push_back(*begin++);    }    str.clear();    str.assign(tempString.begin(),tempString.end());    return count;}int _tmain(int argc, _TCHAR* argv[]){    string s1,s2;    cin >> s1 >> s2;    cout << deleteSubstr(s1,s2) << s1 << endl;    return 0;}
第五題

5.約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3…n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。

#include <stdio.h>#include <iostream>#include <vector>using namespace std;void cycle(int n, int k, int m){    if (k > n)    {        // error        return;    }    vector<int> v;    for (int i = 0; i < n; i++)    {        v.push_back(i+1);    }    while (v.size() > 1)    {        int popNum = (k-1+m-1)%v.size();        k = (popNum+1)%(v.size()-1);        cout << v[popNum] << endl;        v.erase(v.begin()+popNum);    }    cout << v[0] << endl;    v.clear();}int _tmain(int argc, _TCHAR* argv[]){    int n,k,m;    cin >> n >> k >> m;    cycle(n,k,m);    return 0;}

華為上機題匯總(一)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.