2016年华为校招上机考试试题答案

来源:互联网 发布:你是我的知冤家 编辑:程序博客网 时间:2024/04/29 07:25

2016年华为校招上机考试试题答案

    
    【转载请注明出处】http://blog.csdn.net/guyuealian/article/details/50968368
     华为软件研发类都要上机考试,考试注意事项如下:

 华为上机考试试题:

 题目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 stubScanner 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 stubScanner 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");}



3 0
原创粉丝点击