牛客:华为机试
GOGP_nikto
这个作者很懒,什么都没留下…
展开
-
根据层序遍历和中序遍历构建二叉树(C++递归版)
题目描述给定二叉树T(树深度不超过H<=10,深度从1开始,节点个数N<1024,节点编号1~N)的层序和中序遍历,输出T从左向右叶子节点以及树先序和后序遍历序列输入描述:输入两行,分别代表层序和中序遍历结果,节点编号按单个空格分开输出描述:依次输出 从左向右叶子节点 ,先序, 后序 遍历 。 节点编号按空格分开示例1输入3 5 4 2 6 7 12 5 3 6 4 7 1输出2 6 13 5 2 4 6 7 12 5 6 1 7 4 3#include&l原创 2020-08-15 16:25:37 · 2443 阅读 · 0 评论 -
寻找下一个节点(中序遍历递归)
题目描述请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v原创 2020-08-15 14:47:41 · 268 阅读 · 0 评论 -
输出单层节点(双队列)
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(原创 2020-08-15 12:46:00 · 158 阅读 · 0 评论 -
二叉平衡树检查(思路清晰)
题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。思路总结:原本一开始我以为二叉平衡树作为有序树的进化版也要检查二叉树是否有序的,结果看了一眼别人写的发现都只判断左右子树的高度是否满足平衡就行了。后来才知道默认的都是有序的二叉树(0-0);/*struct TreeNode { int val; struct TreeNode *l原创 2020-08-14 20:19:34 · 167 阅读 · 0 评论 -
重建二叉树(递归版,思路和注释清晰)
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNod原创 2020-08-14 19:37:18 · 212 阅读 · 0 评论 -
华为机试之坐标移动
题目描述开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。输入:合法坐标为A(或者D或者W或者S) + 数字(两位以内)坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10; A1A; %; YAD; 等。下面是一个简单的例子 如:A10;S20;W10;D30;X;A1A;B10A11;;A10;处理过程:起点(0,0)A10 = (-10,0原创 2020-07-31 20:14:36 · 259 阅读 · 0 评论 -
华为机试之字符个数统计
题目描述编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次输入abaca输出3输入描述:输入N个字符,字符在ACSII码范围内。输出描述:思路:对于这种统计每个字符或者数字的出现个数,一般的做法都是利用他们的ASCII码作为下标或者数字自己作为下标,依靠数组来统计。这题用C++的话,map这个STL或者SET就很适合这题.输出范围在(0~127)字符的个数。#in原创 2020-07-31 17:00:05 · 228 阅读 · 0 评论 -
华为机试:提取不重复的整数
题目描述输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。输入描述:输入一个int型整数输出描述:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数示例1输入9876673输出37689方法一:#include<iostream>#include<unordered_map>#include<string>using namespace std;int main(){ string str原创 2020-07-31 16:46:38 · 138 阅读 · 0 评论 -
华为机试之表示数字
题目描述将一个字符中所有出现的数字前后加上符号“*”,其他字符保持不变注意:输入数据可能有多行输入描述:输入一个字符串输出描述:字符中所有出现的数字前后加上符号“*”,其他字符保持不变示例1输入Jkdi234klowe90a3输出Jkdi234klowe90a3#include<iostream>#include<string>using namespace std;int main(){ string str; while原创 2020-07-31 13:57:50 · 249 阅读 · 0 评论 -
质数因子题解
题目描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )最后一个数后面也要有空格输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。示例1输入180输出2 2 3 3 5//从质因子2开始,等到n不能整除这个因子,质因子就累加到下一个能整除的质因子//知道n被除到剩下1为止#include<iostream>#inclu原创 2020-07-31 11:41:17 · 490 阅读 · 0 评论 -
C/C++:十六进制转换
题目描述写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )输入描述:输入一个十六进制的数值字符串。输出描述:输出该数值的十进制字符串。示例1输入0xA输出10方法一#include<iostream>#include<string>#include<math.h>using namespace std;int main(){ string str; while(cin>>s原创 2020-07-31 11:10:43 · 741 阅读 · 1 评论 -
华为机试之字符串分割
abc123456789原创 2020-07-31 10:45:08 · 269 阅读 · 0 评论 -
华为机试之明明的随机数
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。样例输入解释:样例有两组测试第一组是3个数字,分别是:2,原创 2020-07-31 10:30:09 · 246 阅读 · 0 评论 -
华为机试之计算字符个数
题目描述写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。输入描述:第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字符。输出描述:输出输入字符串中含有该字符的个数。#include<iostream>#include<string>using namespace std;int main(){ string str; char ch; while(cin>&原创 2020-07-31 10:06:24 · 103 阅读 · 0 评论 -
牛客之华为机试:字符串最后一个单词的长度
题目描述计算字符串最后一个单词的长度,单词以空格隔开。输入描述:一行字符串,非空,长度小于5000。输出描述:整数N,最后一个单词的长度。示例1输入hello world``输出5#include<iostream>#include<vector>#include<string>using namespace std;int main(){ string str; vector<string>ret; w原创 2020-07-31 09:53:00 · 114 阅读 · 0 评论 -
牛客之华为机试:统计兔子
题目有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?#include<iostream>using namespace std;int main(){ //根据递推式 f(n)=f(n-1)+f(n-2);在第三个月开始成年兔子开始变化 int num=0; while(cin>>num) { int m1=1,m2=1,m3=0; for原创 2020-07-29 20:22:27 · 151 阅读 · 0 评论 -
牛客之华为机试: 空气水瓶
题目描述有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?方法一:递归#include<iostream>using namespace std;int fu原创 2020-07-29 19:37:04 · 202 阅读 · 0 评论 -
牛客华为机试:计算日期到天数转换
#include<iostream>using namespace std;int ConverDateToDay(int year ,int month,int day){ int m[12]={31,28,31,30,31,30,31,31,30,31,30,31}; m[1]+=(0==year%4&&0!=year%100||0==year%400); int sum=0,i=0; if(day>m[month-1]||(m原创 2020-07-27 13:41:07 · 400 阅读 · 0 评论 -
华为机试之 参数解析
题目描述在命令行输入如下命令:xcopy /s c:\ d:\,各个参数如下:参数1:命令字xcopy参数2:字符串/s参数3:字符串c:\参数4: 字符串d:\请编写一个参数解析程序,实现将命令行各个参数解析出来。解析规则:1.参数分隔符为空格2.对于用“”包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s “C:\program files” “d:\”时,参数仍然是4个,第3个参数应该是字符串C:\program files,而不是C:\prog原创 2020-07-26 17:12:10 · 297 阅读 · 0 评论 -
华为机试之 尼科彻斯定理
题目描述验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。例如:1^3=12^3=3+53^3=7+9+114^3=13+15+17+19输入描述:输入一个int整数输出描述:输出分解后的string思路:这原本就是一个数学题目,m^3分解后是由first=m*m-m+1开始,所以一个循环直接可以带出不用接口:#include<iostream>using namespace std;int main(){ int m=0原创 2020-07-26 15:06:02 · 232 阅读 · 0 评论 -
记负均正Ⅱ 牛客:华为机试
题目描述从输入任意个整型数,统计其中的负数个数并求所有非负数的平均值,结果保留一位小数,如果没有非负数,则平均值为0本题有多组输入数据,输入到文件末尾,请使用while(cin>>)读入输入描述:输入任意个整数输出描述:输出负数个数以及所有非负数的平均值#include<stdio.h>int main(){ int sum=0,num=0,cnt1=0,cnt2=0; while(1<=scanf("%d",&num)) //当输入结原创 2020-07-19 10:31:17 · 137 阅读 · 0 评论 -
求解立方根 牛客:华为机试
关于原理大家可以看看这篇文章:https://www.matongxue.com/madocs/205.html![核心公式:](https://img-blog.csdnimg.cn/20200719101900927.png)#include<stdio.h>double err=0.01;//牛顿迭代法,不断做曲线的切线,求切线与x的交点double getCubeRoot(double m){ double xn=1,x0=0; x0=xn-(xn*xn原创 2020-07-19 10:20:09 · 184 阅读 · 0 评论 -
求最小公倍数(牛客:华为机试)
//第一种解法#include<iostream>using namespace std;int getmin(int a,int b)//获取最大公约数{ return a==0?b:getmin(b%a,a);}int main(){ int a = 0,b=0; cin >> a>>b; int number=(a*b)/getmin( a, b);//最小公倍数公式:(a*b)/(两者的最大公约数) cout<&l原创 2020-07-19 10:14:53 · 165 阅读 · 0 评论