当前位置:   article > 正文

2017年华为实习编程题_编程题 集五福

编程题 集五福

今天2017317日,华为举行实习生在线编程测试,老样子,三道题,总共120分钟,花了我25分钟就搞定了,华为编程题目应该算很简单的了。

        第一题:输入一个字符串,将字符串中的大写字母改为小写字母,小写字母不变,其他字符忽略,然后输出转换之后的结果,例如:

案例数

输入

输出

案例一

AbCdEf

Abcdef

案例二

Aa1Bb2

aabb

      解决方案:

  1. 读取输入的字符串str

  2. 将输入的字符串str转换为char数组arr

  3. 对数组arr的每个字符判断是大写字母、小写字母还是其他字母

 如果是大写字母,则通过arr[i] + ‘a’ - ’A’转换为小写字母

如果是小写字母,则无需转换

如果是其他字符,则忽视(不用添加到输出字符串中)

  1. import java.util.*;
  2. public class Test1 {
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. int delta = 'a' - 'A';
  6. while (sc.hasNext()) {
  7. String str = sc.next();
  8. char[] arr = str.toCharArray();
  9. StringBuffer buffer = new StringBuffer(arr.length);
  10. for (int i = 0; i < arr.length; i++) {
  11. if(arr[i] >= 'a' && arr[i] <= 'z'){
  12. buffer.append(arr[i]);
  13. } else if(arr[i] >= 'A' && arr[i] <= 'z'){
  14. buffer.append((char)(arr[i] +delta));
  15. }
  16. }
  17. System.out.println(buffer.toString());
  18. }
  19. sc.close();
  20. }
  21. }

       第二题:集五福活动中,字符’1’代表收集到相应的福,例如”10101”表示收集到第135个福,第2和第4个福没有收集到。问:对于几个人收集到的福合在一起,能形成多少个五福呢?例如:

案例

输入

输出

案例一

10101

01010

11111

00000

2

         解决方案:(使用最短木桶原则)

   1. 输入结果集,并转成字符数组char[]

   2. 设置数组int[] result = new int[5];其中每个值代表对应福的总数

   3. 根据输入结果集循环遍历

如果是’1’,那么result[i]++,表示相应的福数量加一

如果是’0’,那么忽略

   4. 最后返回result数组的最小值

  1. import java.util.Scanner;
  2. public class Test2 {
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. int[] result = new int[5];
  6. while (sc.hasNext()) {
  7. String str = sc.next();
  8. char[] arr = str.toCharArray();
  9. for (int i = 0; i < arr.length; i++) {
  10. if(arr[i] == '1'){
  11. result[i]++;
  12. }
  13. }
  14. }
  15. int min = Integer.MAX_VALUE;
  16. for(int i=0; i<5; i++){
  17. if(min > result[i]){
  18. min = result[i];
  19. }
  20. }
  21. System.out.println(min);
  22. }
  23. }

   第三题:计算后序表达式,输入后序表达式字符串,输出表达式计算的结果(其中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’

      如果是运算符号:则弹出两个数值栈,然后根据符号计算结果后入栈

  1. import java.util.Scanner;
  2. import java.util.Stack;
  3. public class Test3 {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. while (sc.hasNext()) {
  7. String line = sc.next();
  8. System.out.println(operate(line));
  9. }
  10. }
  11. public static int operate(String str) {
  12. char[] arr = str.toCharArray();
  13. Stack<Integer> stack = new Stack<Integer>();
  14. for (int i = 0; i < str.length(); i++) {
  15. char c = str.charAt(i);
  16. switch (c) {
  17. case '+':
  18. case '-':
  19. case '*':
  20. case '/':
  21. Integer right = stack.pop();
  22. Integer left = stack.pop();
  23. switch (c) {
  24. case '+':
  25. stack.push(left + right);
  26. break;
  27. case '-':
  28. stack.push(left - right);
  29. break;
  30. case '*':
  31. stack.push(left * right);
  32. break;
  33. case '/':
  34. stack.push(left / right);
  35. break;
  36. }
  37. break;
  38. default:
  39. if(c >= 'A'){
  40. stack.push(c - 'A' + 10);
  41. } else {
  42. stack.push(c - '0');
  43. }
  44. break;
  45. }
  46. if(i == str.length() - 1){
  47. return stack.pop();
  48. }
  49. }
  50. return -1;
  51. }
  52. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号