华为机试题

华为某次Java机试题

1

现在有多组整数数组,需要将他们合并成一个新的数组。合并规则,从每个数组里按顺序取出固定长度的内容合并到新的数组中,取完的内容会删除掉,如果该行不足固定长度或者已经为空,则直接取出剩余部分的内容放到新的数组中,继续下一行。

输入描述:
第一行是每次读取的固定长度,长度>0
第2-n行是需要合并的数组,不同的数组用回车换行分割,数组内部用逗号分隔

输出描述:
输出一个新的数组,用逗号分隔

示例:
输入:
3
2,5,6,7,9,5,7
1,7,4,3,4
输出:
2,5,6,1,7,4,7,9,5,3,4,7

示例:
输入:
4
2,5,6,7,9,5,7
1,7,4,3,4
输出:
2,5,6,7,1,7,4,3,9,5,7,4

代码实现:

package com.ycr;

import java.util.ArrayList;
import java.util.Scanner;

public class Q1 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int fixedLength = Integer.valueOf(scanner.nextLine().trim());
		ArrayList<ArrayList<String>> list = new ArrayList<>();
		String [] tempInt;
		ArrayList<String> tempString;
		while(scanner.hasNext()) {
		//for(int k = 0; k < 2; k ++) {
			tempInt = scanner.nextLine().split(",");
			tempString = new ArrayList<>();
			for(int i = 0; i < tempInt.length; i ++) {
				tempString.add(tempInt[i]);
			}
			list.add(tempString);
		}
		scanner.close();
		StringBuilder out = new StringBuilder();
		final String comma = ",";
		while(!AllEmpty(list)) { 
			for(int i = 0; i< list.size(); i ++) {
				if(list.get(i).isEmpty()) {
					continue;
				}
				int j = 0;
				while(j < fixedLength) {
					if(list.get(i).isEmpty()) {
						break;
					}
					out.append(list.get(i).get(0));
					out.append(comma);
					j ++;
					list.get(i).remove(0);
				}
			}
		}
		System.out.print(out.substring(0, out.length() - 1));
	}
	static boolean AllEmpty(ArrayList<ArrayList<String>> list) {
		for(int i = 0; i< list.size(); i ++) {
			if(!list.get(i).isEmpty()) {
				return false;
			}
		}
		return true;
	}
}

2

对输入的字符串检查是否存在非法字符,输出合法字符串(去重)和非法字符串(不去重)
对合法字符串循环左移10次,再进行排序输出。(举例:比如字符串“abc”,循环左移一次的结果为“bca”)

输入描述:
(1) 字符串中的字符集合为’0’ - ‘9’,‘a’ - ‘z’,‘A’ - ‘Z’,其余为非法字符(空字符串作为定界符),有非法字符的字符串被视为非法输入
(2) 作为输入的字符串个数不超过100,每个字符串长度不超过64
(3) 作为输入的连续空字符串(空格/制表符/回车/换行符)作为一个空格处理(作为定界符,字符串起始字符不为空)
(4) 输入每行只有一个字符串
(5) 输入以空行结束

输出描述:
(1) 输出合法字符串并去重
(2) 输出所有非法字符串
(3) 对结果(1)的去重合法字符串循环左移10次
(4) 对结果(3)合法字符串排序,按ASCII表字符从小到大顺序排序

注意事项:
每输出一个字符串后用空格跟下一个字符串隔离,作为输出的所有字符串之间只能由一个空格(作为定界符)

示例:
输入:

abc
adf
==
acd123
44234tjg
aga'-=
ad--s
abd
123
abcdef
123456789012345678901234567890123456789012345678901234567890123
EDFG
SDFG
ABC
DEF
cccc
a*b=1
abc
cccc
dd
def
87&&^
等等…………

输出:
4个输出,不打了。。。

完成一半的代码:
未完成:去重(可以通过使用HashSet自动去重功能)、排序(可以通过实现Comparable接口完成)

package com.ycr;

import java.util.ArrayList;
import java.util.Scanner;

public class Q2 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		String temp;
		final String end = "";
		final String space = " ";
		StringBuilder valid = new StringBuilder();
		StringBuilder inValid = new StringBuilder();
		StringBuilder afterLeft = new StringBuilder();
		ArrayList<StringBuilder> validList = new ArrayList<>();
		while(true) {
			temp = scanner.nextLine();
			if(temp.trim().equals(end)) {
				break;
			}
			if(isValid(temp)) {
				valid.append(temp);
				validList.add(new StringBuilder(temp));
				valid.append(space);
			} else {
				inValid.append(temp);
				inValid.append(space);
			}
		}
		scanner.close();
		for(int i = 0; i < validList.size(); i ++) {
			afterLeft.append(left(validList.get(i)));
			afterLeft.append(space);
		}
		System.out.println(valid.substring(0, valid.length() - 1));
		System.out.println(inValid.substring(0, inValid.length() - 1));
		System.out.println(afterLeft.substring(0, afterLeft.length() - 1));
	}
	static StringBuilder left(StringBuilder s) {
		int LEN = 10 % s.length();
		return new StringBuilder(s.substring(LEN)).append(s.substring(0, LEN));
	}
	static boolean isValid(String s) {
		for(int i = 0; i < s.length(); i ++) {
			if(!isValid(s.charAt(i))) {
				return false;
			}
		}
		return true;
	}
	static boolean isValid(char c) {
		return c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
	}
}

3

由于不是本人参与,未摘录。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值