当前位置:   article > 正文

华为2018实习春招笔试_int [] num=new int[128];

int [] num=new int[128];

记录一下今天华为笔试题,表示第二第三题无压力能解决,第一题刚上来代码通过百分之十,很无语,后面直接先放着,写后面。运气来的太好?我写到40几分钟,他们好多人都结束了,这有点夸张吧,神通广大呀,他们,虽然我给他们贡献了第二题,第三题!!!惊讶,后来,第一题我直接在群里问了下,小伙伴还是很给力的助力了一波,赞!特此来记录一番!

1、

  1. [编程|100分] 字符串重排
  2. 时间限制:C/C++ 1秒,其他语言 2秒
  3. 空间限制:C/C++ 32768K,其他语言 65536K
  4. 题目描述
  5. 给你一个原始字符串,根据该字符串内每个字符出现的次数,按照ASCII码递增顺序重新调整输出。
  6. 举例!假设原始字符串为:
  7. eeefgghhh
  8. 则每种字符出现的次数分别是:
  9. (1).eee 3次
  10. (2).f 1次
  11. (3).gg 2次
  12. (4).hhh 3次
  13. 重排输出后的字符串如下:
  14. efghegheh
  15. 编写程序,实现上述功能。
  16. 【温馨提示】
  17. (1).原始字符串中仅可能出现“数字”和“字母”;
  18. (2).请注意区分字母大小写。
  19. 输入描述:
  20. eeefgghhh
  21. 输出描述:
  22. efghegheh
  23. 示例1
  24. 输入
  25. eeefgghhh
  26. 输出
  27. efghegheh

  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main(String[]args){
  4. Scanner scanner = new Scanner(System.in);
  5. String s = null;
  6. int [] data = new int[128];
  7. while (scanner.hasNext()){
  8. s = scanner.nextLine();
  9. char [] c = s.toCharArray();
  10. int max = -1;
  11. int length = c.length;
  12. for(int i=0;i<length;i++){
  13. data[c[i]-0]++;
  14. }
  15. for(int j=0; j<128;j++){
  16. max = max>data[j]?max:data[j];
  17. }
  18. for(int k=0;k<max;k++){
  19. for(int m=0;m<128;m++){
  20. if(data[m]!=0){
  21. data[m]--;
  22. System.out.print((char)m);
  23. }
  24. }
  25. }
  26. }
  27. }
  28. }

第二题、

  1. [编程|200分] 跳跃比赛
  2. 时间限制:C/C++ 1秒,其他语言 2秒
  3. 空间限制:C/C++ 32768K,其他语言 65536K
  4. 题目描述
  5. 给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。
  6. 输入描述:
  7. 第一行表示有多少个数n
  8. 第二行开始依次是1到n个数,一个数一行
  9. 输出描述:
  10. 输出一行,表示最少跳跃的次数。
  11. 示例1
  12. 输入
  13. 7
  14. 2
  15. 3
  16. 2
  17. 1
  18. 2
  19. 1
  20. 5
  21. 输出
  22. 3
  23. 说明
  24. 7表示接下来要输入7个正整数,从2开始。数字本身代表可以跳跃的最大步长,此时有2种跳法,为2-2-2-5和2-3-2-5都为3步
思路:思路很重要,第一眼看过来,这题用动态规划来解,印象中这题在leetcode中遇到过,不知道还是在牛客网叶神视频中看过,一验证果不其然。其实也很简单,申明一個數組,默認存很大的值,儅到相應的n步數需要修改時,用动态转移公式
R[i+j]=Math.min(R[i+j],R[i]+1); 来替换数组里面值。
  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main(String[] args) {
  4. Scanner scan = new Scanner(System.in);
  5. int MAX = 100;
  6. int[] A = new int[MAX];
  7. int[] R = new int[MAX];
  8. int n;
  9. int INF=(1<<21);
  10. n = scan.nextInt();
  11. for(int i = 0 ; i <n ;++i){
  12. A[i] = scan.nextInt();
  13. R[i] = INF;
  14. }
  15. R[0] = 0;
  16. for(int i = 0; i < n; ++i){
  17. for(int j = 1; j <= A[i] && i + j < n; ++j){
  18. R[i+j]=Math.min(R[i+j],R[i]+1);
  19. }
  20. }
  21. System.out.println(R[n-1]);
  22. }
  23. }

第三题、
  1. [编程|300分] 大数相乘
  2. 时间限制:C/C++ 1秒,其他语言 2秒
  3. 空间限制:C/C++ 32768K,其他语言 65536K
  4. 题目描述
  5. 编写”长整数相乘”程序,实现两个任意长度的长整数(正数)相乘,输出结果.
  6. 输入描述:
  7. 第一行输入数字A的字符串,字符范围(0~9),第二行输入数字B的字符串,字符范围(0~9)。
  8. 输出描述:
  9. 输出A、B俩数相乘的结果,结果为字符串。
  10. 示例1
  11. 输入
  12. 1234
  13. 4321
  14. 输出
  15. 5332114
  16. 说明
  17. 第一排数字*第二排数字

  1. import java.util.Scanner;
  2. public class Main{
  3. public static void main(String[] args){
  4. Scanner scan=new Scanner(System.in);
  5. String numStr1=scan.next();
  6. String numStr2=scan.next();
  7. int[] intNum1=changetoArray(numStr1);
  8. int[] intNum2=changetoArray(numStr2);
  9. multiply(intNum1,intNum2);
  10. }
  11. public static int[] changetoArray(String numStr){
  12. int length=numStr.length();
  13. int[] intNum=new int[length];
  14. for(int i=0;i<length;i++)
  15. intNum[length-i-1]=Integer.parseInt(String.valueOf((numStr.charAt(i))));
  16. return intNum;
  17. }
  18. public static void multiply(int[] num1,int[] num2){
  19. int length1=num1.length;
  20. int length2=num2.length;
  21. int[] result=new int[length1+length2];
  22. for(int i=0;i<length1;i++)
  23. for(int j=0;j<length2;j++){
  24. int temp = result[i + j] + num1[i] * num2[j];
  25. result[i + j] = temp % 10;
  26. result[i + j + 1] += temp / 10;
  27. if (result[i + j + 1] > 10) {
  28. result[i + j + 1] %= 10;
  29. result[i + j + 2]++;
  30. }
  31. }
  32. StringBuffer sb=new StringBuffer();
  33. for(int i=result.length-1;i>=0;i--)
  34. if(i==result.length-1 && result[i]==0){
  35. }else{
  36. sb.append(result[i]);
  37. }
  38. System.out.println(sb.toString());
  39. }
  40. }

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

闽ICP备14008679号