2016年华为上机考试试题答案
2016-04-06 10:02
337 查看
2016年华为上机考试试题答案
【转载请注明出处】/article/7916286.html华为软件研发类都要上机考试,考试注意事项如下:
华为上机考试试题:
题目1:输入字符串,提取字符串串中大写字母,注意字符串中可能含有空格等其他字符。样例输入:9,AUStralia
样例输出:AUS
参考答案:
package huawei; import java.util.*; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); String string = cin.nextLine(); System.out.println(FindUpper(string)); } public static String FindUpper(String str) { String out = ""; char[] charArray = str.toCharArray(); for (int i = 0; i < charArray.length; i++) { if (charArray[i] <= 90 && charArray[i] >= 65) { out = out + charArray[i]; } } return out; } }题目2:数组排序
描述: 用户输入有符号整型数组(十进制),去掉重复值后,按照升序输出整型数组(十进制)。
输入: 整数N,表示数组的个数;N个整数,整数之间以空格隔开
输出: 去掉重复后,按照升序输出数组
样例输入:4 6 3 3 9
样例输出:3 4 6 9
参考答案:
package paixu; import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner cin = new Scanner(System.in); ArrayList<Integer> al = new ArrayList<Integer>(); String[] srr = cin.nextLine().split(" "); for (int i = 1; i <= Integer.parseInt(srr[0]); i++) { al.add(Integer.parseInt(srr[i])); } Main a = new Main(); a.bubble(al); } public void bubble(ArrayList<Integer> all) { int len = all.size(); boolean flag = false; // 使用冒泡法,实现升序排序 for (int i = 1; i <= len; i++) { for (int j = 1; j <= len - i; j++) { Integer a1 = all.get(j - 1); Integer a2 = all.get(j); if (a1 > a2) {// 若前面的大于后面的,这交换次序,实现升序排序; all.set(j - 1, a2); all.set(j, a1); flag = true;// 如果有数据交换,则flag为true } } if (flag == false) break; } StringBuilder sb = new StringBuilder(); sb.append(all.get(0) + " "); for (int i = 1; i < len; i++) { if (all.get(i) == all.get(i - 1)) continue; sb.append(all.get(i) + " "); } System.out.println(sb.toString()); } }
【C++参考答案】
#include<iostream> #include<string> using namespace std; void quickSort(vector<int>&a,int l,int r) { if(l<r) { int i=l,j=r-1; int tmp=a[i]; while(i<j) { while(i<j&&a[j]>tmp)j--; if (i<j) { a[i++]=a[j]; } while(i<j&&a[i]<tmp)i++; if (i<j) { a[j--]=a[i]; } } a[i]=tmp; quickSort(a,l,i); quickSort(a,i+1,r); } } int main() { string str,tmpStr; getline(cin,str); vector<int>array; int len=str.size(); int j=0;int i; for( i=0;i<len;) { while(i<len&&str[i]!=' ') i++; while(j<i) { tmpStr+=str[j]; j++; } array.push_back(atoi(tmpStr.c_str())); i++; j=i; tmpStr.clear(); } /* 快速排序 ; */ int l=0;int r=array.size(); quickSort(array,l,r); /*输出;*/ for (int k=0;k<r;) { int index=k+1; while(index<r&&array[index]==array[k]) { index++; } cout<<array[k]<<" "; k=index; } cout<<endl; system("pause"); }
题目3:给出一个字符串形式表达的二叉树,求出指定节点深度。
输入的树形结构字符串格式为:
1、以父节点、左子树、右子树表示的二叉树;每个父节点不会超过两个子节点;
2、树的每一个节点采用单个字母表示;树的层次采用数字表示,树根的层次为1,下一层为2,不会超过9层;
3、字符串以“节点名称 层次数 节点名称 层次数…”的形式出现,同一个父节点下,先出现的为左子树。
例如字符串“a1b2c2d3e3f3”生成一棵如下的树:
a
/ \
b c
/ \ /
d e f
节点a的深度为3,节点b的深度是2,节点f的深度是1
输入:一行字符串,表示一个二叉树。一行字符串,一个字符一个节点,输入确保字符不会存在重复节点
输出:指定节点的深度,如果节点不存在,返回0;整数之间用空格隔开
例如:
输入:a1b2c2d3e3f3
ab
输出:3 2
【Java参考答案】
package erchashu; import java.util.*; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); String str1 = sc.nextLine(); Main aa = new Main(); int high = str1.charAt(str1.length()-1)-'1'+1;//�߶� for(int i=1;i<str1.length()/2;i++){ int c2 = Integer.parseInt(str1.charAt(i*2-1)+""); if(high<c2){ high=c2; } } int max = 1;//�������� for(int i = 1;i<=high;i++){ max *= 2; } char[] crr = new char[max]; for(int i = 1;i<=str1.length()/2;i++){ int c2 = str1.charAt(i*2-1)-'1'+1; char c1 = str1.charAt(i*2-2); int num =1; for(int j=1;j<c2;j++){ num*=2; } while(crr[num]!='\u0000'){ num++; } crr[num] = c1; } String str2 = sc.nextLine(); StringBuilder sb = new StringBuilder(); for (char c : str2.toCharArray()){ int index = 0; for(index =0;index<crr.length;index++){ if(crr[index]==c){ break;} } sb.append(aa.shendu(crr,index)); sb.append(' '); } String ss = sb.toString(); System.out.println(ss.substring(0,ss.length())); } public int shendu(char[] crr, int i) { if(i>=crr.length){ return 0; } if(crr[i]=='\u0000'){ return 0; } else{ int a = shendu(crr,2*i); int b = shendu(crr,2*i+1); return (a>=b)? a+1:b+1; } } }
【C++参考答案】
#include<iostream> #include<string> using namespace std; int main() { string str,user_str; getline(cin,str); getline(cin,user_str); int len=str.size(); int user_len=user_str.size(); int maxDepth=atoi(&str[len-1]);//最大的深度; for (int i=0;i<user_len;i++) { char user_tmp=user_str[i]; for(int j=0;j<len;j++) { if (user_tmp==str[j]) { int position=atoi(&str[++j]); cout<<maxDepth-position+1<<" "; break; } if (j==len-1) { cout<<0<<" "; break; } } } cout<<endl; system("pause"); }
相关文章推荐
- 【LeetCode】48. Rotate Image解法及注释
- Thinkphp kindeditor 内容转义
- 关于lua中显示绝对时间和相对时间
- 传值和传址
- Elasticsearch::Transport::Transport::Errors::Unauthorized" error="[401]
- 九幽史程博:助力国内开发者借Win10东风出海
- NTFS For Mac系统配置有什么要求
- XmlSerializer(Type type, Type[] extraTypes) 内存泄漏
- Ajax之数据连接信息捕获
- SharePoint2013 上传文件到文档库
- spring框架学习(四)自动装配
- Linux下获取进程状态
- python 安装 setuptools Compression requires the (missing) zlib module 的解决方案
- 统计无符号整型数的二进制码中‘1’的个数
- web前端工程师
- DevExpress RibbonForm的标题栏(Title Caption)中文显示不全
- Android onTouch事件传递机制
- MyEclipse 引用 jar外包的方法
- QT5 OPenGL(二,平面图形上色)
- 把byte[]转换为String