赞
踩
今天2017年3月17日,华为举行实习生在线编程测试,老样子,三道题,总共120分钟,花了我25分钟就搞定了,华为编程题目应该算很简单的了。
第一题:输入一个字符串,将字符串中的大写字母改为小写字母,小写字母不变,其他字符忽略,然后输出转换之后的结果,例如:
案例数 | 输入 | 输出 |
案例一 | AbCdEf | Abcdef |
案例二 | Aa1Bb2 | aabb |
解决方案:
1. 读取输入的字符串str
2. 将输入的字符串str转换为char数组arr
3. 对数组arr的每个字符判断是大写字母、小写字母还是其他字母
如果是大写字母,则通过arr[i] + ‘a’ - ’A’转换为小写字母
如果是小写字母,则无需转换
如果是其他字符,则忽视(不用添加到输出字符串中)
- import java.util.*;
- public class Test1 {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int delta = 'a' - 'A';
- while (sc.hasNext()) {
- String str = sc.next();
- char[] arr = str.toCharArray();
- StringBuffer buffer = new StringBuffer(arr.length);
- for (int i = 0; i < arr.length; i++) {
- if(arr[i] >= 'a' && arr[i] <= 'z'){
- buffer.append(arr[i]);
- } else if(arr[i] >= 'A' && arr[i] <= 'z'){
- buffer.append((char)(arr[i] +delta));
- }
- }
- System.out.println(buffer.toString());
- }
- sc.close();
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
第二题:集五福活动中,字符’1’代表收集到相应的福,例如”10101”表示收集到第1、3、5个福,第2和第4个福没有收集到。问:对于几个人收集到的福合在一起,能形成多少个五福呢?例如:
案例 | 输入 | 输出 |
案例一 | 10101 01010 11111 00000 | 2 |
解决方案:(使用最短木桶原则)
1. 输入结果集,并转成字符数组char[]
2. 设置数组int[] result = new int[5];其中每个值代表对应福的总数
3. 根据输入结果集循环遍历
如果是’1’,那么result[i]++,表示相应的福数量加一
如果是’0’,那么忽略
4. 最后返回result数组的最小值
- import java.util.Scanner;
- public class Test2 {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- int[] result = new int[5];
- while (sc.hasNext()) {
- String str = sc.next();
- char[] arr = str.toCharArray();
- for (int i = 0; i < arr.length; i++) {
- if(arr[i] == '1'){
- result[i]++;
- }
- }
- }
- int min = Integer.MAX_VALUE;
- for(int i=0; i<5; i++){
- if(min > result[i]){
- min = result[i];
- }
- }
- System.out.println(min);
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
第三题:计算后序表达式,输入后序表达式字符串,输出表达式计算的结果(其中A~F表示10~15)。例如:
案例 | 输入 |
| 输出 |
案例一 | 32+5- | 3+2-5 | 0 |
案例二 | A5-3+ | 10-5+3 | 4 |
解决方案:(采用栈)
1. 读取输入结果字符串str
2. 将输入字符串转换为字符数组char[]
3. 判断每个字符
如果是数字,则直接入栈:arr[i] - ‘0’
如果是大写字符,则转换之后入栈:arr[i] - ‘A’
如果是运算符号:则弹出两个数值栈,然后根据符号计算结果后入栈
- import java.util.Scanner;
- import java.util.Stack;
-
- public class Test3 {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- while (sc.hasNext()) {
- String line = sc.next();
- System.out.println(operate(line));
- }
- }
- public static int operate(String str) {
- char[] arr = str.toCharArray();
- Stack<Integer> stack = new Stack<Integer>();
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- switch (c) {
- case '+':
- case '-':
- case '*':
- case '/':
- Integer right = stack.pop();
- Integer left = stack.pop();
- switch (c) {
- case '+':
- stack.push(left + right);
- break;
- case '-':
- stack.push(left - right);
- break;
- case '*':
- stack.push(left * right);
- break;
- case '/':
- stack.push(left / right);
- break;
- }
- break;
- default:
- if(c >= 'A'){
- stack.push(c - 'A' + 10);
- } else {
- stack.push(c - '0');
- }
- break;
- }
- if(i == str.length() - 1){
- return stack.pop();
- }
- }
- return -1;
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。