华为校园招聘Java机试题

时间:2023-01-10 18:48:54
又到校园招聘的时候了,前几天听同学说华为校招还要考上机,然后就在网上找往年的机试题,找到之后就开始战斗了。。下面的题目都是在网上找的,然后代码是自己一个一个写的。。。
1.程序实现目标: 输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果。
程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符。

    import java.util.Scanner;

public class Test {


public static void main(String[] args) {
System.out.println(StringASCII("abcd"));
Scanner in = new Scanner(System.in);
System.out.println("请输入一串小写字母:");
String str = in.next();
System.out.println(StringASCII(str));
in.close();
}


public static String StringASCII(String str) {
StringBuffer reslut = new StringBuffer();
// 将字符串转换成数组
char[] array = str.toCharArray();
for (int i = 0; i < array.length; i++) {
char arr= (char) (array[i] + 5);
if (arr >'z') {
arr = 'a';
}
reslut.append(arr);
}
return reslut.toString();
}
}


2.程序实现目标:求一个整型数组中元素的平均值,并统计其中大于和小于此平均值的元素的个数。
  程序要求:输入:整型数组中的元素个数及各个元素。

            输出:整型数组中元素的平均值,大于和小于此平均值的元素的个数

import java.util.Scanner;


public class CountAvg {


/**
* @param args
*/
public static void main(String[] args) {
// int arr[] = { 1, 2, 4, 23, 8, 11, 22, 31 };
int[] arr = inputArr();
int[] count = count(arr);
System.out.println("数组的平均值:" + count[2] + ",小于平均值的个数:" + count[1]
+ ",大于平均值的个数:" + count[0]);
}


// 输入整形数组
private static int[] inputArr() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入整形数组的长度:");
int i = scanner.nextInt();
int arr[] = new int[i];
System.out.println("请输入整形数组的元素:");
for (int j = 0; j < arr.length; j++) {
int str = scanner.nextInt();
// System.out.println(arr[j]+"----"+str);
arr[j] = str;
}
scanner.close();
return arr;
}


/**
* 求出整形数组的平均值,大于和小于平均值的个数
*
* @param arr
* @return
*/
private static int[] count(int[] arr) {
int m = 0, n = 0, avg, total = 0;
for (int i = 0; i < arr.length; i++) {
total += arr[i];
}
avg = total / arr.length;
for (int i = 0; i < arr.length; i++) {
if (avg < arr[i]) {
m++;
} else {
n++;
}
}
int result[] = new int[3];
result[0] = m;
result[1] = n;
result[2] = avg;
return result;
}
}

3、手动输入一个存储整数的数组,要求输出数组里面的2个最大值。
   实例: 
             输入:1,2,5,9,84,3,2
             输出:84,9

   
 import java.util.Scanner;


public class CountMax {


/**
* @param args
*/
public static void main(String[] args) {
int[] arr = inputArr();
countMax(arr);
System.out.println("最大值:" + arr[0] + ",第二大的值" + arr[1]);
}


/**
* 计算出两个最大值
*
* @param arr
* @return
*/
private static void countMax(int[] a) {
// 冒泡排序
int temp = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length - i - 1; j++) {
if (a[j] < a[j + 1]) { // 把这里改成大于,就是升序了
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}


// 输入整形数组
private static int[] inputArr() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入整形数组的长度:");
int i = scanner.nextInt();
int arr[] = new int[i];
System.out.println("请输入整形数组的元素:");
for (int j = 0; j < arr.length; j++) {
int str = scanner.nextInt();
// System.out.println(arr[j]+"----"+str);
arr[j] = str;
}
scanner.close();
return arr;
}
}

</pre><span style="font-size:18px;">4、回文数字判断。题目描述:    有这样一类数字,他们顺着看和倒着看是相同的数,例如:121,656,2332等,这样的数字就称为:回文数字。编写一个函数,判断某数字是否是回文数字。    要求实现方法:public String isPalindrome(String strIn);【输入】strIn: 整数,以字符串表示;【返回】true: 是回文数字;              false: 不是回文数字;【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出</span><pre name="code" class="java">import java.util.Scanner;public class Palindrome {	/**	 * @param args	 */	public static void main(String[] args) {		Scanner in = new Scanner(System.in);		System.out.println("请输入一个整形数字:");		String str = in.next();		if (isPalindrome(str)) {			System.out.println(str + "--是回文数字");		} else {			System.out.println(str + "--不是回文数字");		}		in.close();	}	/**	 * 判断是否为回文数字	 * 	 * @param str	 * @return	 */	private static boolean isPalindrome(String str) {		boolean result = false;		System.out.println("str长度---" + str.length());		for (int i = 0; i <= str.length() / 2 - 1; i++) {			if (str.charAt(i) == str.charAt(str.length() - i - 1)) {				result = true;			}else {				result = false;			}		}		return result;	}}


5、要求:随机打印50个随机(4-10长度)的字符串,要求字符串包含的范围是所有的英文字母包含大小写和数字,按照编码顺序排序,每行打印4个,要求首字符对齐.
import java.util.ArrayList;import java.util.List;import java.util.Random;public class RandomStr {	/**	 * @param args	 */	public static void main(String[] args) {		List<String> arrayStr = new ArrayList<String>();		for (int i = 0; i < 50; i++) {			Random random = new Random();			// 0-6			int nextInt = random.nextInt(7);			int strlen = nextInt + 4;			// 打印出随机数			String randomStr = randomStr(strlen);			// System.out.println("打印出来的字符串:" + randomStr);			arrayStr.add(randomStr);		}		int count = 0;		for (String str : arrayStr) {			System.out.print(str + " ");			if (count % 4 == 0) {				// 换行				System.out.println();			}			count++;		}	}	/**	 * 打印出随机的字符串	 * 	 * @param strlen	 * @return	 */	private static String randomStr(int strlen) {		char[] str = new char[strlen];		int i = 0;		while (i < strlen) {			// 生成0-3的随机数			int f = new Random().nextInt(4);			if (f == 0) {				str[i] = (char) ('a' + Math.random() * 26);			} else if (f == 1) {				str[i] = (char) ('A' + Math.random() * 26);			} else {				str[i] = (char) ('0' + Math.random() * 10);			}			i++;		}		return new String(str);	}}


6.手动输入一个字符串,仅限小写字母,统计并输出每个字符在字符串中出现的次数,并输出。提示(可以用Map)
实例:
输入:aaabbbccc
输出:a 3
      b 3
      c 3

import java.util.HashMap;import java.util.Map;
import java.util.Scanner;


public class NumberOfElement {


/**
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入的一组小写字符串:");
String str = in.next();
in.close();
// 正则运算
String reg = "^[a-z]*$";
if (str.matches(reg)) {


Map<Character, Integer> charCount = getCharCount(str);
// 遍历map
for (Map.Entry<Character, Integer> e : charCount.entrySet()) {
System.out.println(e.getKey() + " " + e.getValue());
}
}else {
System.out.println("您输入的字符串不符合要求");
}
}


private static Map<Character, Integer> getCharCount(String str) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
char[] array = str.toCharArray();
for (int i = 0; i < array.length; i++) {
if (!map.containsKey(array[i])) {
map.put(array[i], 1);
} else {
map.put(array[i], map.get(array[i]) + 1);
}
}
return map;
}


}


7、要求实现方法public String addTwoBigNumber(String s1,string s2)
 大数相加,注意处理异常

import java.math.BigInteger;import java.util.Scanner;


public class BigNumAdd {


/**
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入第一个大数:");
String str1 = in.next();
System.out.println("请输入第二个大数:");
String str2 = in.next();
in.close();
if (isBigNumber(str1) &&isBigNumber(str2)) {
String bigNumber = addTwoBigNumber(str1, str2);
System.out.println("两个大数相加的结果为:" + bigNumber);
}else {
System.out.println("输入错误!");
}
}


/**
* 大数相加
*
* @param s1
* @param s2
* @return
*/
public static String addTwoBigNumber(String s1, String s2) {
BigInteger bt1 = new BigInteger(s1);
BigInteger bt2 = new BigInteger(s2);
return bt1.add(bt2).toString();
}
/**
* 判断一个字符串是否为大数
* @param str
* @return
*/
public static boolean isBigNumber(String str) {
boolean result = false;
String reg = "[0-9]*$";
if (str.matches(reg)) {
result = true;
} else {
result = false;
}
return result;
}
}

8、比较二维数组列最小值,组成一个新数组返回。(实现核心算法,不需要使用IO)

输入:intArr = {{5,6,1,16},{7,3,9}}

输出:intArrs ={1,3}


import java.util.Arrays;import java.util.Scanner;




public class CountMin {


/**
* @param args
*/
public static void main(String[] args) {
int[][] arr = {{5,6,1,16},{7,3,9},{5,7,12}};
int[] colmin = getColmin(arr);
System.out.println(Arrays.toString(colmin));
}


private static int[] getColmin(int[][] arr) {
int minArr[] = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
int tmp[] = arr[i];
// 数组的排序,从小到大
Arrays.sort(tmp);
minArr[i] = tmp[0];
}
return minArr;
}


}


9. 输入:a aa,cat tiger.123dd 
输出: tiger
功能描述:键盘输入一句话
输出一句话中最常的单词,如果最长的出现多次,返回第一个。这句话只包含数字字母和标点。

import java.util.ArrayList;import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;




public class FindLongString {


/**
* @param args
*/
public static void main(String[] args) {
// String str = "a aa,cat tiger.123dd 12ssss,asxdrt saxfdt asdgde";
Scanner in = new Scanner(System.in);
System.out.println("请任意的输入一串字符串:");
String str = in.nextLine();
System.out.println("str---" + str);
String reslut = getLongString(str);
System.out.println("----" + reslut);
in.close();
}
/**
* 找出一串字符串中最长的字符
* @param str
* @return
*/
private static String getLongString(String str) {
String reg = "[ .,]";
String[] arr = str.split(reg);
ArrayList<String> result = new ArrayList<String>();
int length = 0;
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
// 获得长度
if (length<arr[i].length()) {
length = arr[i].length();
result.add(arr[i]);
}
}
return result.get(result.size()-1);
}


}


10. 功能描述:将字符串中的字母全部替换成字母的下一个字母,
要是最后一位是z或Z则替换为a或A。
输入:aBxyZ
输出:bCyzA

import java.util.Scanner;



public class TransNext {


/**
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一串字符串(大小写字母):");
String str = in.nextLine();
String reg = "^[A-Za-z]+$";
// String reg2 = "^[A-Z]$";
if (str.matches(reg)) {
String result = transNext(str);
System.out.println("转换后的字符串:" + result);
}else {
System.out.println("输入不符合要求!");
}
in.close();
}
/**
* 将字符串中的字母全部替换成字母的下一个字母
* @param str 目标字符串
* @return
*/
private static String transNext(String str) {
char[] charArray = str.toCharArray();
char[] newArray = new char[charArray.length];
for (int i = 0; i < charArray.length; i++) {
newArray[i] = (char) (charArray[i]+ 1);
if (charArray[i] =='Z') {
newArray[i] = 'A';
}
if (charArray[i] =='z') {
newArray[i] = 'a';
}
}
return String.valueOf(newArray);
}


}


11. 功能描述:判断一个字符串中是否只含有相同的子字符串(子串长度>=2)
输入:abab 
返回:true
输入:abcd
返回:false

import java.util.HashMap;import java.util.Map;
import java.util.Scanner;


public class CheckStr {


/**
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一串字符:");
String str = in.nextLine();
in.close();
boolean result = checkString(str);
System.out.println("结果--" + result);
}


public static boolean checkString(String data) {
boolean result = false;
Map<Character, Integer> map = new HashMap<Character, Integer>();
char[] array = data.toCharArray();
for (int i = 0; i < array.length; i++) {
if (!map.containsKey(array[i])) {
result = false;
map.put(array[i], 1);
}else {
result = true;
}
}
return result;
}
}


12. 功能描述:已知:yi er san si wu liu qi ba jiu 分别对应123456789,
对一段只含有这几种字符串的字符串进行转换,如:
输入:yiersansan
输出:1233



   
 public class Tran2Num {


/**
* 功能描述:已知:yi er san si wu liu qi ba jiu 分别对应123456789,
* 对一段只含有这几种字符串的字符串进行转换,如: 输入:yiersansan 输出:1233
*
* @param args
*/
public static void main(String[] args) {
String str = "yiersansansisiwuwu";
String number = trunNumber(str);
System.out.println("转换输出的结果--" + number);
}


public static String trunNumber(String data) {
String result = "";
String str[] = {"yi","er","san","si","wu","liu","qi"," ba","jiu"};
for (int i = 0; i < 9; i++) {
if (data.contains(str[i])) {
result = data.replace(str[i], String.valueOf(i+1));
data = result;
}
}
return result;
}
}



13. 功能描述:删除字符串中字符个数最少的字符,最少字符串有多个,最少的要全部删除
               然后返回该子字符串。
输入:asdasdas
输出:asasas

import java.util.ArrayList;import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;


public class DeleteMin {


/**
* 功能描述:删除字符串中字符个数最少的字符,最少字符串有多个,最少的要全部删除 然后返回该子字符串。
* 输入:asdasdas 输出:asasas
*
* @param args
*/
public static void main(String[] args) {
//String str = "asdasdas";
Scanner in = new Scanner(System.in);
System.out.println("请输入一串字符串:");
String str = in.nextLine();
in.close();
List<Character> deleteChar = deleteLittle(str);
for (Character character : deleteChar) {
str = str.replace(character.toString(), "");
//System.out.println("出现次数最少的字符---" + character.toString());
}
System.out.println("删除后的字符串---" + str);
}


private static List<Character> deleteLittle(String str) {
// 统计那些字符串的个数最少
Map<Character, Integer> map = new HashMap<Character, Integer>();
char[] charArray = str.toCharArray();
for (int i = 0; i < charArray.length; i++) {
if (!map.containsKey(charArray[i])) {
map.put(charArray[i], 1);
} else {
map.put(charArray[i], map.get(charArray[i]) + 1);
}
}
// 删除map中值最小的字符串
int[] values = new int[map.size()];
int i = 0;
for (Map.Entry<Character, Integer> e : map.entrySet()) {
// 获得值的大小
values[i++] = e.getValue();
}
// 排序
Arrays.sort(values);
// 得到最小值
int j = values[0];
List<Character> list = new ArrayList<Character>();
for (Map.Entry<Character, Integer> e : map.entrySet()) {
// 通过值获取键
if (e.getValue() == j) {
Character key = e.getKey();
list.add(key);
}
}
return list;
}
}

16. 功能描述:统计一个数字转为二进制后,01的个数,组成数组返回

输入:6

输出:{1,2}

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Int2ASSII {

/**
* @param args
*/
public static void main(String[] args) {
// int i = 6;
Scanner in = new Scanner(System.in);
System.out.println("请输入一个数字:");
int i = in.nextInt();
in.close();
// String reg = "^[0-9]*$";
// if (!String.valueOf(i).matches(reg)) {
// System.out.println("请输入数字!");
// }
int[] result = trans(i);
System.out.println("输出---" + Arrays.toString(result));
}

/**
* 将数字转换成ASII码
*
* @param i
* @return 返回0和1的个数
*/
private static int[] trans(int i) {
// 将整形转换成二进制
char[] charArray = Integer.toBinaryString(i).toCharArray();
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int j = 0; j < charArray.length; j++) {
if (!map.containsKey(charArray[j])) {
map.put(charArray[j], 1);
} else {
map.put(charArray[j], map.get(charArray[j]) + 1);
}
}
// int[] result = new int[2];
Integer integer = map.get('0');
Integer integer2 = map.get('1');
int[] result = {integer,integer2};
// for (Map.Entry<Character, Integer> entry : map.entrySet()) {
// if (entry.getKey() == '0') {
// result[0] = entry.getValue();
// } else {
// result[1] = entry.getValue();
// }
// }
return result;
}

}

17. 功能描述:对一个二进制数的每位进行01反转,求翻转后的二进制所对应的十进制

输入:1010

输出:5

import java.util.Arrays;


public class Binary2Int {

/**
* @param args
*/
public static void main(String[] args) {
String str = "1010";
int result = binaryToInt(str);
System.out.println("反转后的值:" + result);
}
/**
* 对一个二进制数的每位进行0和1反转,求翻转后的二进制所对应的十进制
* @param str
* @return
*/
private static int binaryToInt(String str) {
char[] array = str.toCharArray();
for (int i = 0; i < array.length; i++) {
if (array[i]=='0') {
array[i]='1';
}else {
array[i]='0';
}
}
System.out.println(Arrays.toString(array));
String result = "";
for (int i = 0; i < array.length; i++) {
result += array[i];
}
return Integer.parseInt(result, 2);
}

}

18. 功能描述:判断一个字符串中的"( )"是否配对

输入:if(a.equals(a))

输出:true

public class IsMatch {

/**
* 判断一个字符串中的"( )"是否配对
* 输入:if(a.equals(a)) 输出:true
* @param args
*/
public static void main(String[] args) {
String str = "if(a.(equals(a)))";
boolean result = isMatch(str);
System.out.println("字符串中的()是否配对:" + result);
}

/**
* 判断()内的字符是否匹配
*
* @param str
* @return
*/
private static boolean isMatch(String str) {
boolean result = false;
int count = 0;
char[] array = str.toCharArray();
for (int i = 0; i < array.length; i++) {
if (array[i] == '(') {
count++;
} else if (array[i] == ')') {
count--;
}
}
if (count == 0) {
result = true;
}
return result;
}

}

19. 功能描述:查找一个字符串的子字符串集

输入:abab

输出:a b ab ba aba bab 

 

要求实现方法:

public List<String> getChildren(String data)

{

    List<String> list = new ArrayList<String>();

    //TODO

    return list;

}

import java.util.ArrayList;
import java.util.List;

public class GetChildren {

/**
* 查找一个字符串的子字符串集 输入:abab 输出:a b ab ba aba bab
*
* @param args
*/
public static void main(String[] args) {
String str = "ababc";
List<String> children = getChildren(str);
// System.out.println(children.toString());
for (String string : children) {
System.out.print(string+" ");
}
}

public static List<String> getChildren(String data) {
List<String> list = new ArrayList<String>();
for (int i = 1; i < data.length(); i++) {
for (int j = data.length() - i + 1; j > 0; j--) {
String newStr = data.substring(data.length() - j - i + 1,
data.length() - j + 1);
// System.out.println("----" + newStr);
if (!list.contains(newStr)) {
list.add(newStr);
}
}
}
return list;
}
}

21. 程序实现目标: 输入一个字符,将字符转换为小写,将其对应的ASCII值加5后,输出结果。

程序要求:若其值加5后的字符值大于'z',将其转换成从a开始的字符。

输入:‘A

输出:‘f

public class Trans {

public static void main(String[] args) {
char input = 'X';
char output = trans(input);
System.out.println(output);
}
/**
* 将大写字母转换成小写字母再加5
* @param input
* @return
*/
private static char trans(char input) {
// 将大写转为小写
char result = (char) (Character.toLowerCase(input) + 5);
if (result>'z') {
result = (char) (result-26);
}
return result;
}

}

22. 要求:将一个二维数组进行逆序,逆序后所有的元素行列不定,进行随机排列

①先把数组每一行逆序

②再把逆序后每一行进行随机排列

如:{{4,3,32,5},{1,2,3,4},{9,6,5,4}};

⇒4 6 5 9 
 3 4 2 1 
 5 4 32 3

import java.util.Arrays;
import java.util.Random;

public class ArraySort {

/**
* @param args
*/
public static void main(String[] args) {
int input[][] = { { 4, 3, 32, 5 }, { 1, 2, 3, 4 }, { 9, 6, 5, 4 } };
int output[][] = arraySort(input);
for (int i = 0; i < output.length; i++) {
System.out.println(Arrays.toString(input[i]));
}
}

/**
* ①先把数组每一行逆序 ②再把逆序后每一行进行随机排列
*
* @param input
* @return
*/
private static int[][] arraySort(int[][] input) {
int[] temp = null;
for (int i = 0; i <= input.length / 2; i++) {
// 先把数组每一行逆序
temp = input[i];
input[i] = input[input.length - 1 - i];
input[input.length - 1 - i] = temp;

}
for (int i = 0; i < input.length; i++) {
int tmp = 0;
for (int j = 0; j < input[i].length; j++) {
// 产生[0-len)的数
int n = (int) (Math.random()*(input[i].length));
int m = (int) (Math.random()*(input[i].length));
// 随机交换数据
tmp = input[i][m];
input[i][m] = input[i][n];
input[i][n] = tmp;
}
}
return input;
}

}

24. 分解质因数

eg:输入 28

输出 2*2*7

public class Test {

/**
*
* @param args
*/
public static void main(String[] args) {
int m = 28;
String result = perenum(m);
System.out.println("因数--" + result);
}

private static String perenum(int m) {
StringBuffer sb = new StringBuffer();
int tmp = m;
int i = 0;
while (true) {
for (i = 2; i <= tmp; i++) {
if (tmp % i == 0) {
tmp = tmp / i;
sb.append(i + "*");
break;
}
}
if (tmp == 1){
break;
}
}
// 删除最后一个字符
String result = sb.toString().substring(0, sb.toString().length()-1);
return result;
}
}

26. 二维数组转置

例:1 2 3

    4 5 6

转置

    1 4

    2 5

   3 6


package com.zjp.huawei;
import java.util.Arrays;

/**
* 二维数组倒置
* 二维数组转置
例:1 2 3
4 5 6
转置
1 4
2 5
3 6
* @author cqu_zhu
*
*/
public class TransArray {

/**
* @param args
*/
public static void main(String[] args) {
int [][] input = {{1,2,3},{4,5,6}};
int [][] output = inversionArray(input);
for (int i = 0; i < output.length; i++) {
for (int j = 0; j < output[i].length; j++) {
System.out.print(output[i][j]+" ");
}
System.out.println();
}
}

private static int[][] inversionArray(int[][] input) {
int result[][] = new int[input[0].length][input.length];
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < input[i].length; j++) {
result[j][i] = input[i][j];
}
}
return result;
}

}

27. 功能描述:输入字符串,将该字符串中数字放到非数字的后面,并保持原有顺序不变。

例如:h3a2p0p1y----------happy3201

public String  childStr(String inputStr){

}

package com.zjp.huawei;

import java.util.Scanner;

/**
* 输入字符串,将该字符串中数字放到非数字的后面,并保持原有顺序不变。 例如:h3a2p0p1y----------happy3201
*
* @author cqu_zhu
*
*/
public class FindCharAndNum {

/**
* @param args
*/
public static void main(String[] args) {
// String str = "h3a2p0p1y";
Scanner in = new Scanner(System.in);
System.out.println("请随机输入字母和字符串:");
String str = in.nextLine();
String reg = "^[0-9a-zA-Z]*$";
in.close();
if (!str.matches(reg)) {
System.out.println("输入的字符串不符合要求");
return;
}
String result = childStr(str);
System.out.println(result);
}
public static String childStr(String inputStr){
StringBuffer charBuffer = new StringBuffer();
StringBuffer numBuffer = new StringBuffer();
char[] array = inputStr.toCharArray();
// 字母的正则表达式
String reg = "^[a-zA-Z]*$";
String reg2 = "^[0-9]*$";
for (int i = 0; i < array.length; i++) {
// 如果是字母
if (String.valueOf(array[i]).matches(reg)) {
charBuffer.append(array[i]);
}else if(String.valueOf(array[i]).matches(reg2)){
numBuffer.append(array[i]);
}
}
return charBuffer.toString()+numBuffer.toString();
}
}

28. 输入一个身份证号码(15位和18位)和一个年份,计算现在的年龄(忽略非法参数)

eg610618199001020065  2011

输出:21

package com.zjp.huawei;

/**
* 输入一个身份证号码(15位和18位)和一个年份,计算现在的年龄(忽略非法参数) eg:610618199001020065 2011 输出:21
*
* @author cqu_zhu
*
*/
public class Demo28 {

/**
* @param args
*/
public static void main(String[] args) {
// String ID = "610618199001020065";
String ID ="110105710923582";
int year = 2015;
int age = countAge(ID,year);
System.out.println("年龄---" + age);
}

private static int countAge(String ID, int year) {
String date = "";
//7-12位出生年月日,比如670401代表1967年4月1日
if (ID.length() == 15) {
String d = ID.substring(6, 8);
date = "19"+d;
}else if(ID.length() ==18){
date = ID.substring(6,10);
}
int age = year -Integer.parseInt(date);
System.out.println(date);
return age;
}
}
29.  输入一个字符串,如果是小写则转换成相应的大写字母的后五位,如果是 VWXYZ 则转换成 abcde, 其他的都不变,例如:“ aDsR154+-/. ”则应该输出为“ FDXR154+-/.
package com.zjp.huawei;/** * 输入一个字符串,如果是小写则转换成相应的大写字母的后五位,如果是VWXYZ则转换成abcde,其他的都不变,例如:“aDsR154+-/.”则应该输出为“ * FDXR154+-/.” *  * @author cqu_zhu *  */public class Demo29 {	public static void main(String[] args) {		String str = "aDsR154+-/.";		String reslut = parseStr(str);		System.out.println("转换后的字符串---" + reslut);	}	private static String parseStr(String str) {		char[] array = str.toCharArray();		String reg = "^[a-z]*$";		for (int i = 0; i < array.length; i++) {			if (String.valueOf(array[i]).matches(reg)) {				// 把小写转换为大写,并后退5位				array[i] = (char) (Character.toUpperCase(array[i]) + 5);				if (array[i]>'Z') {					array[i]= (char) (array[i]-26);				}			}		}		StringBuffer buffer = new StringBuffer();		for (int i = 0; i < array.length; i++) {			buffer.append(array[i]);		}		return buffer.toString();	}}

31. 删除一个字符串里出现次数最多的子字符串

如果有多个出现次数相同的并且出现次数最多则将多个全部删除比如abbccd得到结果 ad

package com.zjp.huawei;

import java.util.HashMap;
import java.util.Map;

/**
* 删除一个字符串里出现次数最多的子字符串
如果有多个出现次数相同的并且出现次数最多则将多个全部删除比如abbccd得到结果 ad
* @author cqu_zhu
*
*/
public class Demo30 {

/**
* @param args
*/
public static void main(String[] args) {
String str = "abbccdeefff";
String result = deleteMaxChar(str);
System.out.println(result);
}
/**
* 删除字符串字符出现次数最多的字符
* @param str
* @return
*/
private static String deleteMaxChar(String str) {
char[] array = str.toCharArray();
Map<Character,Integer> map = new HashMap<Character,Integer>();
for (int i = 0; i < array.length; i++) {
if(!map.containsKey(array[i])){
map.put(array[i], 1);
}else {
map.put(array[i], map.get(array[i])+1);
}
}
int m =0;
// 得出字符最大值
for(Map.Entry<Character, Integer> entry :map.entrySet()){
if (entry.getValue() > m) {
m = entry.getValue();
}
}
// 根据字符最大值得到相应的字符
for(Map.Entry<Character, Integer> entry :map.entrySet()){
if (entry.getValue() ==m) {
String replace = str.replace(String.valueOf(entry.getKey()), "");
str = replace;
}
}
return str;
}

}

32. 判断字符串首字母就大写,非首字母小写

1、如输入 Good 返回 TRUE

2、过程中不需要输出任何IO流。

package com.zjp.huawei;

/**
* 32. 判断字符串首字母就大写,非首字母小写 1、如输入 Good 返回 TRUE 2、过程中不需要输出任何IO流。
*
* @author cqu_zhu
*
*/
public class Demo32 {

/**
* @param args
*/
public static void main(String[] args) {
String str = "Good";
String result = fristChar(str);
System.out.println(result);
}

private static String fristChar(String str) {
String result = "";
String reg = "^[A-Z]*$";
char[] array = str.toCharArray();
if (String.valueOf(array[0]).matches(reg)) {
result ="TRUE";
}else {
result ="FALSE";
}
return result;
}

}

33. 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

package com.zjp.huawei;

import java.util.Arrays;

/**
* 33. 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
* 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
*
* @author cqu_zhu
*
*/
public class Demo33 {

/**
* @param args
*/
public static void main(String[] args) {
String str = "I am a boy";
String result = inversionString(str);
System.out.println(result);
}

private static String inversionString(String str) {
String[] splitStr= str.split(" ");
String[] newStr = new String[splitStr.length];
for (int i = 0; i < splitStr.length; i++) {
newStr[splitStr.length -i-1] = splitStr[i];
}
StringBuffer result = new StringBuffer();
for (int i = 0; i < splitStr.length; i++) {
result.append(newStr[i] + " ");
}
return result.toString();
}

}

34. 题目背景

写出一个程序,接受一个浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整

接口

int round(double d)

举例

-4.5 四舍五入的结果是-4

4.4 四舍五入的结果是4

package com.zjp.huawei;

import java.util.Arrays;

/**
* 33. 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
* 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
*
* @author cqu_zhu
*
*/
public class Demo34 {

/**
* @param args
*/
public static void main(String[] args) {
double d = -3.65;
int result = round(d);
System.out.println("返回的结果--" + result);
}

private static int round(double d) {
String str = String.valueOf(d);
String subStr = str.substring(str.indexOf(".") + 1,
str.indexOf(".") + 2);
int i = Integer.parseInt(subStr);
int reg = 0;
if (i >= 5) {
// 返回最小的(最接近负无穷大)double 值,该值大于等于参数,并等于某个整数。
reg = (int) Math.ceil(d);
} else {
// 返回最大的(最接近正无穷大)double 值,该值小于等于参数,并等于某个整数。
reg = (int) Math.floor(d);
}
return reg;
}

}

35.数列求和

编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double

1+1/2!+ .... +1/n!

输出保留5位小数。

下面是一些合理的表达式的例子:

Input         5                

Output      1.71667   

package com.zjp.huawei;


/**
* 编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。 1+1/2!+ ....
* +1/n! 输出保留5位小数。 下面是一些合理的表达式的例子: Input 5 Output 1.71667
*
* @author cqu_zhu
*
*/
public class Demo35 {

/**
* @param args
*/
public static void main(String[] args) {
int k = 5;
double result = result(k);
if (result>1.5) {
// 保留5位有效数字
String str = String.valueOf(result);
String reg = str.substring(str.indexOf(".")+6, str.indexOf(".")+7);
String m = str.substring(str.indexOf(".")+1, str.indexOf(".")+6);
String in = str.substring(str.indexOf(".")-1, str.indexOf(".")+1);
int n = 0;
if (Integer.parseInt(reg)>=5) {
n = Integer.parseInt(m)+1;
}else {
n = Integer.parseInt(m);
}
System.out.println("---" + in + n);
}else {
System.out.println("---" + result);
}
}
/**
* 求阶乘的倒数
* @param k
* @return
*/
private static double result(int k){
double d = 0;
for (int i = 1; i <= k; i++) {
d +=(double)1/fact(i);
}
return d;
}
/**
* 计算k的阶乘
* @param i
* @return
*/
private static int fact(int k) {
int i = 1;
for (int j = 1; j <= k; j++) {
i =j*i;
}
return i;
}

}

36. 计算整数各个数位之和 

描述要求使用递归实现,计算整数各个数位之和。

举例: 123 --> 1+2+3 = 6

运行时间限制无限制 

内存限制无限制 

输入: 0xff ff ff ff以内的整数

输出: NA

样例输入: 123 

样例输出: 6 

package com.zjp.huawei;

/**
* 计算整数各个数位之和 描述: 要求使用递归实现,计算整数各个数位之和。 举例: 123 --> 1+2+3 = 6 运行时间限制: 无限制 内存限制:
* 无限制 输入: 0xff ff ff ff以内的整数 输出: NA 样例输入: 123 样例输出: 6
*
* @author cqu_zhu
*
*/
public class Demo36 {

/**
* @param args
*/
public static void main(String[] args) {
int num = 1234351363;
int result = bitSum(num);
System.out.println("各个位相加得到的和--" + result);
}

/**
* 递归求各个各个数位之和
*
* @param k
* @return
*/
private static int bitSum(int num) {
int tmp = 0;
if (num > 10) {
tmp += num % 10 + bitSum(num / 10);
} else {
tmp = num;
}
return tmp;
}

}

37.提取不重复的整数 

描述输入一个int32位整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

运行时间限制: 10 Sec 

内存限制无限制 

输入整数,如9876673

注意:

1、整数最后的0,请忽略,例如:输入1750,输出:571

2、负数,保留'-'在前面,例如:输入-175,输出:-571

输出整数,如37689

样例输入: 9876673 

样例输出: 37689  

package com.zjp.huawei;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
* 输入一个int型32位整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
* @author cqu_zhu
*
*/
public class Demo37 {

/**
* @param args
*/
public static void main(String[] args) {
int num = -9876673;
if (num <0) {
int abs = Math.abs(num);
int result = getConvertInt(abs);
System.out.println("-" + result);
}else {
int result = getConvertInt(num);
System.out.println(String.valueOf(result));
}
}

private static int getConvertInt(int num) {
String str = String.valueOf(num);
char[] array = str.toCharArray();
List<Character> list = new ArrayList<Character>();
for (int i = 0; i < array.length; i++) {
if (!list.contains(array[i])) {
list.add(array[i]);
}
}
List<Character> newList = new ArrayList<Character>();
for (int i = 0; i <list.size(); i++) {
newList.add(list.get(list.size()-1-i));
}
StringBuffer buffer = new StringBuffer();
for (Character character : newList) {
buffer.append(character);
}
return Integer.parseInt(buffer.toString());
}

}