华为补招笔试题20171130

注:实现时无需考虑不合法的情况。

解答过程:感觉没有问题,可后来通过率才37.5%,puzzle。

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

//转化为大写
string strToUpper(string &str)
{
    for (int i = 0; i < str.size(); i++)
    {
        if (str[i] >= 97)
        {
            str[i] -= 32;
        }
    }
    return str;
}

int main()
{
    string strOrder, strNum;
    cin >> strOrder >> strNum;
    int i = 0;
    vector<string> vecstrNum;//用于存放逗号之间的整数字符串
    string strTemNum;

    //把逗号之间的整数字符串选出来,并放到vecstrNum中
    while (i < strNum.size())
    {
        if (strNum[i] != ‘,‘)
        {
            strTemNum.push_back(strNum[i]);
        }
        else
        {
            vecstrNum.push_back(strTemNum);
            strTemNum.clear();
        }
        i++;
        if (i == strNum.size())
        {
            vecstrNum.push_back(strTemNum);
        }
    }

    for (int j = 0; j < vecstrNum.size(); j++)
    {
        //对每个整数字符串内部进行升序排序
        sort(vecstrNum[j].begin(), vecstrNum[j].end());

        //把第一位是0的进行处理,和后面首个不为0的数字进行交换
        if (vecstrNum[j][0] == ‘0‘)
        {
            for (int i = 1; i < vecstrNum[j].size(); i++)
            {
                if (vecstrNum[j][i] != ‘0‘)
                {
                    swap(vecstrNum[j][0], vecstrNum[j][i]);
                    break;
                }
            }
        }
    }

    //需要把整数字符串转化为long类型或者int类型,因为string比较大小和数字类型比较大小不一致.比如33和111,字符串类型认为前者大.
    vector<long> vecIntNum;
    for (int j = 0; j < vecstrNum.size(); j++)
    {
        long num = 0;
        for (int i = 0; i < vecstrNum[j].size(); i++)
        {
            num += pow(10, vecstrNum[j].size() - i - 1)*(vecstrNum[j][i] - ‘0‘);//注意减去‘0‘
        }
        vecIntNum.push_back(num);
    }

    if (strToUpper(strOrder) == "ASCE")
    {
        sort(vecIntNum.begin(), vecIntNum.end());
        for (int j = 0; j < vecstrNum.size() - 1; j++)
        {
            cout << vecIntNum[j] << ‘,‘;
        }
        cout << vecIntNum[vecIntNum.size() - 1];
    }
    else//如果是降序就可以倒序输出.
    {
        sort(vecIntNum.begin(), vecIntNum.end());
        for (int j = vecIntNum.size() - 1; j > 0; j--)
        {
            cout << vecIntNum[j] << ‘,‘;
        }
        cout << vecIntNum[0];
    }

    return 0;
}
时间: 2024-10-08 14:14:50

华为补招笔试题20171130的相关文章

2017华为优招笔试题

  哎,没有接到笔试通知,不知道为啥就错过了. 之后见到题目,前两道编程题.其实都见过类似的题目,有点思路,但是直接快速完整实现出来,水平还是达不到. 这样的题目,也不算难,三道编程题至少AC两道才算可以.但是自己还是写代码写的少,需要多练习,增加熟练度. 第一道题,统计一个字符串中,出现的字母字符串,数字字符串和其他字符组成的字符串的个数. 思想非常简单直观,但对于边界条件以及何时将统计的数量进行增加要仔细考虑. 代码如下: #include <iostream> #include <

华为C语言笔试题集合

①华为笔试题搜集 1.static有什么用途?(请至少说明两种)    1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变.    2) 在模块内(但在函数体外),一个被声明为静态的变量能够被模块内所用函数訪问,但不能被模块外其他函数訪问.它是一个本地的全局变量.    3) 在模块内,一个被声明为静态的函数仅仅可被这一模块内的其他函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么差别?    1) 引用必须被初始化,指针不必.    2)

2014华为实习上级笔试题——三天打鱼两天晒网

#include<iostream> using namespace std; int func(int year)//判断闰年的个数 { int count=0; for(int i=1990;i<year;i++) if(year%4==0&&year%100!=0||year%400==0) count++; return count; } int main() { int year,month,day; int count,sum,num; //!!!!!!!!!

2014华为实习上级笔试题-- 统计字符串中出现的单词

#include<iostream> //#include<string> using namespace std; struct node { char word[10]; int num; }; node obj[100]; void my_word(char input[], char output[]) { int sum=0,flag=0; int i=0,j=0,k=0; while(input[i]!='\0')///////////读入单词 { if((input[

网易2017秋招笔试题3:最长公共子括号序列长度

[问题来源]网传的2017网易秋招笔试题 [问题描述] [算法思路] 下面的解题思路摘自  http://www.cnblogs.com/Atanisi/p/7500186.html 刚看到题我就想到暴力解,深搜出所有合法的括号序列,再依次比较公共子序列的长度,返回最长的.但是深搜一般和路径有关,这道题仅仅需要最大公共子序列的长度.而我们发现最大公共子序列的长度就是 s.size() - 1(当且仅当修改距离为 1 时 LCS 最大), 那么我们就想到,可以变换 s 中一个括号的位置,枚举所有的

华为C/C++笔试题&amp;答案

1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问.它是一个本地的全局变量. 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用.那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必. 2) 引用初始化以后不能被改变,指针可以改变所指的对象.

美团2017秋招笔试题 拼凑钱币

给你六种面额 1.5.10.20.50.100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数. 输入描述: 输入包括一个整数n(1 ≤ n ≤ 10000) 输出描述: 输出一个整数,表示不同的组合方案数 设f[i][j]为使用a[0]-a[i]的面额凑到j元的不同组合个数 #include <iostream> #include <cstring> using namespace std; int a[6] = {1,5

TX2017秋招笔试题之geohash编码

问题描述:geohash编码:geohash常用于将二维的经纬度转换为字符串,分为两步:第一步是经纬度的二进制编码,第二步是base32转码. 此题考察纬度的二进制编码:算法对纬度[-90, 90]通过二分法进行无限逼近(取决于所需精度,本题精度为6). 注意,本题进行二分法逼近过程中只采用向下取整来进行二分,针对二分中间值属于右区间.算法举例如下: 针对纬度为80进行二进制编码过程: 1) 区间[-90, 90]进行二分为[-90, 0),[0, 90],成为左右区间,可以确定80为右区间,标

TX2017秋招笔试题之素数对

问题描述: 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果.输入值小于1000. 如,输入为10, 程序应该输出结果为2.(共有两对质数的和为10,分别为(5,5),(3,7)) 输入描述: 输入包括一个整数n,(3 ≤ n < 1000) 输出描述: 输出对数 示例1 输入 10 输出 2 ------------------------------------------------ 解决思路; 首先判断素数(在大于1的自然数中,除了1和它本身以外不再有其他因数