华为上机题汇总(一)

华为上机题汇总(一)

注:编译环境为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;
}
时间: 2024-11-08 05:24:49

华为上机题汇总(一)的相关文章

华为上机题汇总(六)

华为上机题汇总(六) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总六 目录 第二十六题 第二十七题 第二十八题 第二十九题 第三十题 第二十六题 26.一副牌中发五张扑克牌给你:让你判断数字的组成: 有以下几种情况: 1:四条:即四张一样数值的牌(牌均不论花色)2:三条带 一对 3:三条带两张不相同数值的牌 4:两对 5:顺子 包括 10,J,Q,K,A 6:什么都不是 7:只有一对 #include <iostream> #include <

华为上机题汇总(二)

华为上机题汇总(二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二 目录 第六题 第七题 第八题 第九题 第十题 第六题 6.比较一个数组的元素 是否为回文数组(如abcdcba,hjjh) #include <iostream> #include <vector> #include <string> using namespace std; bool isPalindrome(const string &str){

华为上机题汇总(二十一)

华为上机题汇总(二十) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二十 目录 第一百零一题 第一百零二题 第一百零三题 第一百零四题 第一百零五题 第一百零一题 101.合唱队问题 问题描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2-,K,他们的身高分别为T1,T2,-,TK, 则他们的身高满足T1<-Ti+1>->TK(1<

华为上机题汇总(十四)

华为上机题汇总(十四) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十四 目录 第六十六题 第六十七题 第六十八题 第六十九题 第七十题 第六十六题 66.问题描述 股票是一种有价证券,是股份公司为筹集资金发给投资者作为公司资本部分所有权的凭证,成为股东以此获得股息(股利),并分享公司成长或交易市场波动带来的利润:但也要共同承担公司运作错误所带来的风险.南邮华为俱乐部会长小郑同学最近计划进入股市淘金,看中一支股票,借本次华为赛机会,请你帮忙指出:何时买

华为上机题汇总(十三)

华为上机题汇总(十三) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十三 目录 第六十一题 第六十二题 第六十三题 第六十四题 第六十五题 第六十一题 61.给一个数组,输出数组里超出所有元素平均值的元素的个数.比如:1.2.3.4.5,输出3. #include <iostream> using namespace std; int overAvg(int a[],int n){ int sum = 0, count = 0; for (int i

华为上机题汇总(十)

华为上机题汇总(十) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十 目录 第四十六题 第四十七题 第四十八题 第四十九题 第五十题 第四十六题 46.在给定字符串中找出单词( "单词"由大写字母和小写字母字符构成,其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词):找到单词后,按照长度进行降序排序,(排序时如果长度相同,则按出现的顺序进行排列),然后输出到一个新的字符串中:如果某个单词重复出现多次,则只输出一次:如

华为上机题汇总(四)

华为上机题汇总(四) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总四 目录 第十六题 第十七题 第十八题 第十九题 第二十题 第十六题 16.将一个字符串的元音字母复制到另一个字符串,并排序(30分) 问题描述: 有一字符串,里面可能包含英文字母(大写.小写).数字.特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序). 说明: 1.

华为上机题汇总(二十)

华为上机题汇总(二十) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总二十 目录 第九十六题 第九十七题 第九十八题 第九十九题 第一百题 第九十六题 96 . 给分数的循环节加括号 两个整数相除,将结果用字符串返回.如果是循环小数,将循环的位用括号括起来. 输入:1 3 输出:0.(3) 输入 1 7 输出 0.(142857) #include <iostream> #include <string> using namespace s

华为上机题汇总(十二)

华为上机题汇总(十二) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总十二 目录 第五十六题 第五十七题 第五十八题 第五十九题 第六十题 第五十六题 56.在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是"夫妻相".所谓"夫妻相",就是两个人看上去比较般配,长相.身材等某些方面有一定的相似度.本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具"夫妻相"的人. 题目中预先给定一组女士的姓名拼音.输

华为上机题汇总(八)

华为上机题汇总(八) 注:编译环境为Visual Studio 2012,答案仅供参考. 目录 华为上机题汇总八 目录 第三十六题 第三十七题 第三十八题 第三十九题 第四十题 第三十六题 36.输入一行数字:123 423 5645 875 186523 在输入第二行:23 将第一行中含有第二行中"23"的数输出并排序 结果即:123 423 186523 #include <iostream> #include <vector> #include <s