华为机试算法题
华为机试算法题
沉浮一湘蕉
心若沉浮,浅笑安然。
展开
-
HJ108 求最小公倍数
描述正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。//要求最小公倍数,需要求最大公约数,由于:最小公倍数 = 两数相乘/最大公约数//利用辗转相除法求取最大公约数:两个正整数 a 和 b(a 大于 b),它们的最大公约数等于 a 除以 b 的余数 c 和 较小数 b 之间的最大公约数。#include<iostream>us原创 2022-03-25 19:20:57 · 162 阅读 · 0 评论 -
HJ106 字符逆序
描述将一个字符串str的内容颠倒过来,并输出。输入描述:输入一个字符串,可以有空格输出描述:输出逆序的字符串#include<iostream>#include<string>#include<algorithm>using namespace std;int main(){ string str; //cin >> str;包含空格就不能用cin getline(cin, str); reverse(str.be原创 2022-03-25 19:19:41 · 181 阅读 · 0 评论 -
HJ103 Redraiment的走法
描述Redraiment是走梅花桩的高手。Redraiment可以选择任意一个起点,从前到后,但只能从低处往高处的桩子走。他希望走的步数最多,你能替Redraiment研究他最多走的步数吗?输入描述:数据共2行,第1行先输入数组的个数,第2行再输入梅花桩的高度输出描述:输出一个结果//动态规划问题----状态转移方程:以i结尾的最长子序列,dp[i]=max(dp[i],dp[j]+1)//最长上升子序列:对于任意的i<j都满足ai<aj的子序列#inclu原创 2022-03-25 19:18:37 · 269 阅读 · 0 评论 -
HJ102 字符统计
描述输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出。数据范围:字符串长度满足1≤len(str)≤1000输入描述:一个只包含小写英文字母和数字的字符串。输出描述:一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。//ASCII码:0/48,A/65,a/97#include<iostream>#include<stri原创 2022-03-25 19:17:17 · 181 阅读 · 0 评论 -
HJ100 等差数列
描述等差数列2,5,8,11,14。。。。(从 2 开始的 3 为公差的等差数列)输出求等差数列前n项和#include<iostream>using namespace std;int main(){ int n; while (cin >> n) { int sum = (2 + (2 + 3 * (n - 1)))*n / 2; cout << sum << endl; } return 0;}...原创 2022-03-25 19:14:28 · 136 阅读 · 0 评论 -
HJ97 记负均正
描述首先输入要输入的整数个数n,然后输入n个整数。输出为n个整数中负数的个数,和所有正整数的平均值,结果保留一位小数。0即不是正整数,也不是负数,不计入计算。如果没有正数,则平均值为0。数据范围:1≤n≤2000,输入的整数都满足 ∣val∣≤1000输入描述:首先输入一个正整数n,然后输入n个整数。输出描述:输出负数的个数,和所有正整数的平均值。#include<iostream>#include<vector>using names...原创 2022-03-25 19:13:34 · 244 阅读 · 0 评论 -
HJ91 走方格的方案数
描述请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。注:沿棋盘格之间的边缘线行走输入描述:输入两个正整数n和m,用空格隔开。(1≤n,m≤8)输出描述:输出一行结果动态规划,状态方程:dp[i][j]=dp[i-1][j]+dp[i][j-1]#include<iostream>#include<algorithm&g原创 2022-03-25 19:12:02 · 556 阅读 · 0 评论 -
HJ87 密码强度等级
描述密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。一、密码长度:5 分: 小于等于4 个字符10 分: 5 到7 字符25 分: 大于等于8 个字符二、字母:0 分: 没有字母10 分: 密码里的字母全都是小(大)写字母20 分: 密码里的字母符合”大小写混合“三、数字:0 分: 没有数字10 分: 1 个数字20 分: 大于1 个数字四、符号:0 分: 没有符号10 分: 1 个符号25 分: 大于1 个符号五、奖励(只能选符合最多的那一种奖励):原创 2022-03-25 19:10:22 · 794 阅读 · 0 评论 -
HJ86 求最大连续bit数
描述求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1。输入描述:输入一个int类型数字输出描述:输出转成二进制之后连续1的个数#include<iostream>#include<algorithm>using namespace std;//位运算int main(){ int num; while (cin >> num) { int count = 0; i原创 2022-03-25 19:08:47 · 201 阅读 · 0 评论 -
HJ85 最长回文子串
描述给定一个仅包含小写字母的字符串,求它的最长回文子串的长度。所谓回文串,指左右对称的字符串。所谓子串,指一个字符串删掉其部分前缀和后缀(也可以不删)的字符串数据范围:字符串长度1≤s≤350进阶:时间复杂度:O(n),空间复杂度:O(n)输入描述:输入一个仅包含小写字母的字符串输出描述:返回最长回文子串的长度//1.暴力循环(三层循环,以i开始,j结束,判断是否为回文字符串)//2.中心扩展(把给定的字符串的每一个字母当做中心,向两边扩展,这样来找最长的子回文串原创 2022-03-25 19:07:17 · 350 阅读 · 0 评论 -
HJ84 统计大写字母个数
描述找出给定字符串中大写字符(即'A'-'Z')的个数。数据范围:字符串长度:250\1≤∣s∣≤250字符串中可能包含空格或其他字符进阶:时间复杂度:O(n) ,空间复杂度:O(n)输入描述:对于每组样例,输入一行,代表待统计的字符串输出描述:输出一个整数,代表字符串中大写字母的个数#include<iostream>#include<string>using namespace std;int main(){ string st.原创 2022-03-25 19:04:00 · 74 阅读 · 0 评论 -
HJ80 整型数组合并
描述题目标题:将两个整型数组按照升序合并,并且过滤掉重复数组元素。输出时相邻两数之间没有空格。输入说明,按下列顺序输入:1 输入第一个数组的个数2 输入第一个数组的数值3 输入第二个数组的个数4 输入第二个数组的数值输出合并之后的数组//1、set中的元素都是排好序的 2、set集合中没有重复的元素#include<iostream>#include<set>using namespace std;int main(){ in.原创 2022-03-25 19:01:18 · 380 阅读 · 0 评论 -
HJ76 尼科彻斯定理
描述验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。例如:1^3=12^3=3+53^3=7+9+114^3=13+15+17+19输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。#include<iostream>#include<math.h>using namespace std;int main(){ int m; while (cin >> m) { int s原创 2022-03-25 18:58:56 · 365 阅读 · 0 评论 -
HJ75 公共子串计算
描述给定两个只包含小写字母的字符串,计算两个字符串的最大公共子串的长度。注:子串的定义指一个字符串删掉其部分前缀和后缀(也可以不删)后形成的字符串。输入两个只包含小写字母的字符串输出一个整数,代表最大公共子串的长度数据范围:字符串长度:1≤s≤150进阶:时间复杂度:O(n^3) ,空间复杂度:O(n)//动态规划,dp[i][j] 表示字符串a[1...i]和字符串b[1...j]的最大公共字串长度//如果str1[i - 1] == str2[j - 1]则dp[i][原创 2022-03-24 13:37:40 · 122 阅读 · 0 评论 -
HJ74 参数解析
描述在命令行输入如下命令:xcopy/sc:\\ d:\\e,各个参数如下:参数1:命令字xcopy参数2:字符串/s参数3:字符串c:\\参数4:字符串d:\\e请编写一个参数解析程序,实现将命令行各个参数解析出来。解析规则:1.参数分隔符为空格2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy/s "C:\\programfiles" "d:\"时,参数仍然是4个,第3个参数应该是字符串C:\\progra...原创 2022-03-24 13:35:25 · 166 阅读 · 0 评论 -
HJ73 计算日期到天数转换
描述根据输入的日期,计算是这一年的第几天。保证年份为4位数且日期合法。进阶:时间复杂度:O(n) ,空间复杂度:O(1)//对于非整百年,把年份除以4,如果可以整除,就是闰年,如果有余数,就是平年;//对于整百年,把年份除以400,如果可以整除,就是闰年,如果有余数,就是平年。#include<iostream>using namespace std;bool leap_year(int year){ if (year % 400 == 0 || (year原创 2022-03-24 13:31:13 · 201 阅读 · 0 评论 -
HJ72 百钱买百鸡问题
描述公元五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?现要求你打印出所有花一百元买一百只鸡的方式。100=5*a+3*b+c/3;100=a+b+c;--->5*a+3*b+(100-a-b)/3=100---->7a+4b=100---->b=25-7/4a不等式关系:b>=0,a>=0,a+b<=100,a是4的倍数---->a=4,8,12原创 2022-03-24 13:29:17 · 152 阅读 · 0 评论 -
HJ66 配置文件恢复
描述有6条配置命令,它们执行的结果分别是:命令 执行 reset resetwhat resetboard boardfault boardadd wheretoadd boarddelete noboardatall rebootbackplane impossible backplaneabort installfirst hehe unknowncommand 注意:he...原创 2022-03-24 13:27:30 · 227 阅读 · 0 评论 -
HJ65 查找两个字符串a,b中的最长公共子串
描述查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!//// dp[i][j] str1截止到第i个字符和str2截止到第j个字符的最长公共子串长度////状态转换方程:若相等dp[i][j]=dp[i-1][j-1]+1;若不等dp[i][j]=0;#include<iostream>#include<string>#includ原创 2022-03-24 13:24:56 · 1114 阅读 · 0 评论 -
HJ62 查找输入整数二进制中1的个数
描述输入一个正整数,计算它在二进制下的1的个数。注意多组输入输出!!!!!!#include<iostream>using namespace std;int main(){ int n; while (cin >> n) { int ans = 0; while (n) { if (n & 1 == 1) ans++; n = n >> 1; } cout << ans <&l原创 2022-03-24 13:23:06 · 172 阅读 · 0 评论 -
HJ61 放苹果
描述把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?注意:如果有7个苹果和3个盘子,(5,1,1)和(1,5,1)被视为是同一种分法。//递归算法:分类讨论,//1.n>m,必然有空盘子去掉,f(n,m)=f(m,m) //2.n<=m,有盘子为空时,f(n,m)=f(n-1,m);没有盘子为空时,所有盘子可以去掉一个苹果方法数不变,f(n,m)=f(n,m-n)//递归的过程中,n和m在减小,出口为n==1||m==0...原创 2022-03-24 13:21:24 · 172 阅读 · 0 评论 -
HJ60 查找组成一个偶数最接近的两个素数
描述任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个素数差值最小的素数对。质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)//1.从偶数的一半开始查找;//2.判断两个数是否为素数;//3.如果是素数,则即为所求。#include<iostream>using namespace std;bool isprime(int nu原创 2022-03-23 20:03:33 · 195 阅读 · 0 评论 -
HJ56 完全数计算
描述完全数(Perfectnumber),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。输入n,请输出n以内(含n)完全数的个数。性质:如果p是质数,且2^p-1也是质数,那么(2^p-1)*2^(p-1)便是一个完全数。#include<iostream>#include<mat.原创 2022-03-23 19:59:34 · 314 阅读 · 0 评论 -
HJ54 表达式求值
描述给定一个字符串描述的算术表达式,计算出结果值。输入字符串长度不超过 100 ,合法的字符包括”+,-,*,/,(,)”,”0-9”。原创 2022-03-23 19:57:34 · 1311 阅读 · 0 评论 -
HJ53 杨辉三角的变形
描述:第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3,输入2则输出-1。杨辉三角是二项式系数在三角形中的一种几何排列.该三角中每行第一个数和最后一个数都是1。如果这个数不是行首或者行尾则该数字的值是肩膀上数字的和。杨辉三角的变形: 第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,...原创 2022-03-23 19:54:07 · 524 阅读 · 0 评论 -
HJ51 输出单向链表中倒数第k个结点
描述输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针。链表结点定义如下:structListNode{intm_nKey;ListNode*m_pNext;};正常返回倒数第k个结点指针,异常返回空指针.要求:(1)正序构建链表;(2)构建后要忘记链表长度。方法1:用一下n,它也不知道啊......#include<iostream>using namespace std;struct L...原创 2022-03-23 19:47:46 · 1461 阅读 · 0 评论 -
HJ50 四则运算
描述输入一个表达式(用字符串表示),求这个表达式的值。保证字符串中的有效字符包括[‘0’-‘9’],‘+’,‘-’, ‘*’,‘/’ ,‘(’, ‘)’,‘[’, ‘]’,‘{’ ,‘}’。且表达式一定合法。1.用两个栈分别压数字和运算符; 2.如果当前运算符优先级('* /')高于栈顶运算符(' + -')优先级,则将运算符入栈; 反之(包括优先级相同),从数字栈中弹出两个数,从运算符栈中弹出栈顶运算符,进行运算,数字栈压入运算结果,符号栈压入当前运算符。 重复该...原创 2022-03-23 19:27:21 · 460 阅读 · 0 评论 -
HJ48 从单向链表中删除指定值的节点
描述输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。链表的值不能重复。构造过程,例如输入一行数据为:6 21 23 25 14 57 22则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示:1 2 表示为2->1链表为2->13 2表示为2->3链表为2->3->15 1表示为1->5...原创 2022-03-23 19:22:41 · 134 阅读 · 0 评论 -
HJ46 截取字符串
描述输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出。#include<iostream>#include<string>using namespace std;int main(){ string str; while (cin >> str) { int k; cin >> k; if (k > str.length()) break; cout << str.substr(0,原创 2022-03-23 19:11:12 · 153 阅读 · 0 评论 -
HJ43 迷宫问题
定义一个二维数组 N*M ,如 5 × 5 数组下所示:intmaze[5][5]={0,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的路线。入口点为[0,0],既第一格是可以走的路。bfs广度优先搜索解决迷宫问题:1.将起点入队2.将队首结点可拓展的点入队3.如果没...原创 2022-03-23 19:08:50 · 478 阅读 · 0 评论 -
HJ37 统计每个月兔子的总数
描述有一种兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子。例子:假设一只兔子第3个月出生,那么它第5个月开始会每个月生一只兔子。假如兔子都不死,问第n个月的兔子总数为多少?动态规划:dp[i]=dp[i-1]+dp[i-2]即三月龄及以上兔子总数 = 二月龄兔子总数 + 原本三月龄及以上兔子总数#include<iostream>using namespace std;int main(){ int month =.原创 2022-03-23 18:56:21 · 296 阅读 · 0 评论 -
HJ34 图片整理
描述Lily上课时使用字母数字图片教小朋友们学习英语单词,每次都需要把这些图片按照大小(ASCII码值从小到大)排列收好。请大家给Lily帮忙,通过代码解决。Lily使用的图片使用字符"A"到"Z"、"a"到"z"、"0"到"9"表示。#include<iostream>#include<string>#include<vector>using namespace std;//手写快排void sqsort(string &ss, int原创 2022-03-23 18:48:07 · 153 阅读 · 0 评论 -
HJ26 字符串排序
描述编写一个程序,将输入字符串中的字符按如下规则排序。规则 1 :英文字母从 A 到 Z 排列,不区分大小写。如,输入: Type 输出: epTy规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。如,输入: BabA 输出: aABb规则 3 :非英文字母的其它字符保持原来的位置。如,输入: By?e 输出: Be?y数据范围:输入的字符串长度满足1≤n≤1000#include<iostream>#include<string>#i.原创 2022-03-23 14:17:56 · 212 阅读 · 0 评论 -
HJ15 求int型正整数在内存中存储时1的个数
描述输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。输入描述:输入一个整数(int类型)输出描述:这个数转换成2进制后,输出1的个数#include<iostream>using namespace std;int main(){ int num; int count = 0; cin >> num; while (num > 0) { if (num & 1 == 1) { ..原创 2022-03-18 13:15:13 · 86 阅读 · 0 评论 -
HJ14 字符串排序
描述给定 n 个字符串,请对 n 个字符串按照字典序排列。输入描述:输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。输出描述:数据输出n行,输出结果为按照字典序排列的字符串。#include<iostream>#include<string>#include<set>using namespace std;int main(){ int n; cin >&g原创 2022-03-18 13:09:20 · 165 阅读 · 0 评论 -
HJ13 句子逆序
描述将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符注意本题有多组输入输入描述:输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。输出描述:得到逆序的句子C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件#include&l原创 2022-03-18 12:59:41 · 121 阅读 · 0 评论 -
HJ12 字符串反转
描述接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)输入描述:输入一行,为一个只包含小写字母的字符串。输出描述:输出该字符串反转后的字符串。#include<iostream>#include<string>#include<algorithm>using namespace std;int main(){ string str; /* while (cin >> s原创 2022-03-18 12:41:12 · 65 阅读 · 0 评论 -
HJ11 数字颠倒
描述输入一个整数,将这个整数以字符串的形式逆序输出程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001输入描述:输入一个int整数输出描述:将这个整数以字符串的形式逆序输出方法1:#include<iostream>#include<string>#include<algorithm>using namespace std;int main(){ int n; cin >> n原创 2022-03-17 20:38:08 · 210 阅读 · 0 评论 -
HJ10 字符个数统计
描述编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3 。输入描述:输入一行没有空格的字符串。输出描述:输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。#include<iostream>#include<strin原创 2022-03-17 20:35:42 · 307 阅读 · 0 评论 -
HJ9 提取不重复的整数
描述输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是 0 。输入描述:输入一个int型整数输出描述:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数#include<iostream>#include<vector>#include<string>using namespace std;int main(){ vector<int> c; int i原创 2022-03-17 20:32:50 · 268 阅读 · 0 评论