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

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

    
    【转载请注明出处】http://blog.csdn.net/guyuealian/article/details/50968368
     华为软件研发类都要上机考试,考试注意事项如下:
2016年华为上机考试试题答案_第1张图片

 华为上机考试试题:

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



你可能感兴趣的:(华为上机,考试试题答案)