华为历年机考题收录

2023-11-02

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();
                }
            }
        }
    }
    if(characters.empty()) {
        cout<<"true";
    }else {
        cout<<"false";
    }
    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);

}

如有错误,还望指正。

以上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

华为历年机考题收录 的相关文章

  • 大多数女生为什么不适合当程序员?

    最重要的一点 逻辑思维能力 女程序员最大的问题不是压力大而是思维方式切换的挑战 从抽象到具象 平常需要将问题抽象出来 运用抽象思维解决工作上的困难 生活中间又要很具象 很感性地和人交往 这是非常难以达到的一件事 加上工作压力一大 就容易崩溃

随机推荐

  • skywalking 实现收集基于python的Django项目链路追踪案例

    一 python3环境设置 1 1 安装python3 apt get update apt install python3 pip y pip install apache skywalking root skywalking agent
  • 人脸相关公开数据集

    1 皮肤分割和面部检测数据集 FSD 1 数据集名称 Face and Skin Detection FSD Database 2D图像 2 数据集简介 The Face and Skin Detection FSD Database is
  • nodejs使用kafka

    什么是卡夫卡 kafka 是一种分布式的 基于发布 订阅的消息系统 消息以消息队列的形式进行发送 如何使用kafka 安装kafka npm i kafka node 配置config 配置kafka的地址和topic 放在config文件
  • 【VQ-VAE论文精读+代码实战】Neural Discrete Representation Learning

    VQ VAE论文精读 代码实战 Neural Discrete Representation Learning 0 前言 Abstract 1 Introduction 提出现有方法的问题并说明有哪些贡献 2 Related Work 提出
  • vue中click无效问题

    当父元素为relative 子元素为absolute时可能会出现click点击无效 无法触发onClick事件的情况 目前已知两种解决方法 1 最外层div的z index层级设置比里面绝对定位的大 2 用 click prevent也是可
  • 【机器学习】特征工程:时间特征构造以及时间序列特征构造(含源代码理解)

    目录 特征工程 时间特征构造以及时间序列特征构造 一 前言 二 特征构造介绍 三 时间特征构造 3 1 连续值时间特征 3 2 离散值时间特征 3 2 1 时间特征拆解 3 2 2 时间特征判断 3 2 3 结合时间维度的聚合特征 四 时间
  • shell浅谈之三for、while、until循环

    一 简介 Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式 有三种常用的循环语句 for while和until while循环和for循环属于 当型循环 而until属于 直到型循环 循环控制符 break和conti
  • 【Redis速通】基础知识2 - 常用数据结构

    Redis 通用指令 下面是一些 Redis 的通用命令 你可以根据下表进行简单的复习 键操作命令 SET 设置指定键的值 GET 获取指定键的值 DEL 删除指定键 EXISTS 检查指定键是否存在 KEYS 获取匹配指定模式的键列表 字
  • MyBatis代码生成器-Example讲解

    什么是example类 mybatis generator会为每个字段产生Criterion 为底层的mapper xml创建动态sql 如果表的字段比较多 产生的example类会十分庞大 理论上通过example类可以构造你想到的任何筛
  • Linux JAVA环境的搭建tomcat的部署(含多实例)

    tomcat tomcat是Apache软件基金会项目中的一个核心项目由 Apache Sun 和其他一些公司及个人共同开发而成 tomcat 是 Java 语言开发的 Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器 to
  • 快排和归并排序算法的模板及运用

    快排和归并排序算法的模板及运用 一 快速排序 二 快速选择 三 归并排序 四 逆序对的数量 一 快速排序 核心思想 把一个序列分为两部分 左半部分所有数均小于等于或大于等于右半部分所有数 递归处理左右两部分 具体步骤 其中q为一个数组 l为
  • windows下SSH服务的开启

    本人服务安装环境是win7 启动程序是freeSSHd freeSSHd下载链接如下 链接 https pan baidu com s 18ZNS5PvACo30fYjRhI ZPA 提取码 39e7 运行 exe文件 默认安装即可 安装路
  • New Year and Social Network【Hello 2020 F】【拓扑+LCA+贪心】

    题目链接 看到比赛的时候zzq大聚聚用了LCT做的 在线 首先 我们可以发现 两棵大小相同 构造形状不同的树 一定是可以用另一棵树的边来维持这棵树上的每一个点的相互连通性的 我的做法 就是基于这样展开的 我们有T1 T2两棵树 现在我们要去
  • 寻找n以内的亲密数对 python编程

    问题描述 寻找n以内的亲密数对 代码格式如下 def fac n return xxx n int input 此处输入由系统自动完成不需要自己输入 只要写这样一条语句即可 4分 题目内容 对于两个不同的整数A和B 如果整数A的全部因子 包
  • 第三周项目1-(3)ListInsert、ListDelete、InitList、DestroyList函数

    问题及代码 Copyright c 2015 烟台大学计算机学院 All rights reserved 文件名称 test cpp 作者 王敏 完成日期 2015年09月16日 版本号 v1 0 问题描述 ListInsert ListD
  • Redis三种集群模式(主从复制replication、哨兵sentinel、Cluster)

    文章目录 主从复制 哨兵模式 sentinel Cluster集群 Codis https blog csdn net miss1181248983 article details 90056960 主从复制 复制 replication
  • php mysql记录用户行为_用户参与记录存储的演变_PHP教程

    有这样一个应用场景 用户有两个连续的操作A和操作B 必须是操作A完成后才能执行操作B 如果操作A没有完成就触发了操作B 则显示用户需要先执行操作A 即在操作B执行需要查询操作A是否执行过 这里引申出来的问题是 记录用户参与记录 提供针对用户
  • Manifest merger failed : android:exported needs to be explicitly specified for <activity>. Apps targ

    Manifest merger failed android exported needs to be explicitly specified for Apps targeting Android 12 and higher are re
  • pygame入门

    pygame入门 文章目录 pygame入门 说明 一 pygame的安装 二 pygame模块概览 三 pygame的 hello world 四 事件 理解事件 事件检索 处理鼠标事件 处理键盘事件 事件过滤 产生事件 五 显示 全屏显
  • 华为历年机考题收录

    1 前言 华为每年 实习生和校招 的笔试题一般都是三道编程题 大约是因为华为体量太大 岗位太多 如果每个岗位都针对性出题目 成本也高 总的来说 华为的机考题还是比较简单 即使对于我这样偶尔写写leetcode的前端开发者也是如此 华为宣讲会