当前位置:   article > 正文

中国电信2021秋招笔试_中国电信校招笔试python

中国电信校招笔试python

1.求没出现重复字符的最长字串长度

(我发现每次笔试时候都来不及好好想,就只能暴力,有一些暴力也没过去)

暴力

  1. public static void main(String[] args){
  2. Scanner cin = new Scanner(System.in);
  3. String input = cin.nextLine();
  4. int maxLength = 1;
  5. ArrayList<Character> list = new ArrayList<>();
  6. int index = 0;
  7. while (index<=input.length()-1){
  8. int length=0;
  9. list.clear();
  10. int j = index;
  11. for(;j<input.length();j++){
  12. if(!list.contains(input.charAt(j))){
  13. length++;
  14. list.add(input.charAt(j));
  15. }else {
  16. if(length>maxLength) maxLength = length;
  17. index++;
  18. break;
  19. }
  20. }
  21. if(j>=input.length()){
  22. if(length>maxLength) maxLength = length;
  23. index++;
  24. }
  25. }
  26. System.out.println(maxLength);
  27. }

2.现在有6种杯子,其容积大小分为1 10 20 50 100 。假设水足够多,编写程序求装满体积为
N的桶(N为0~10000的非负整数)的不同组合的个数。

先贴一个暴力法只通过百分之75,其余超时的答案。(据说换成long再考虑空值可以到100%?没机会试了)

  1. public static void main(String[] args){
  2. Scanner scanner = new Scanner(System.in);
  3. int n = scanner.nextInt();
  4. int[] array = {100,50,20,10,5,1};
  5. int[] max = new int[array.length];
  6. for(int i=0;i<array.length;i++){
  7. max[i] = n/array[i];
  8. }
  9. int result = 0;
  10. for(int i100=0;i100<=max[0];i100++){
  11. if(i100 * 100 > n) break;
  12. for(int i50=0;i50<=max[1];i50++){
  13. if(i100*100+i50*50>n) break;
  14. for(int i20=0;i20<=max[2];i20++){
  15. if(i100*100+i50*50+i20*20>n) break;
  16. for(int i10=0;i10<=max[3];i10++){
  17. if(i100*100+i50*50+i20*20+i10*10>n) break;
  18. for(int i5=0;i5<=max[4];i5++){
  19. if(i100*100+i50*50+i20*20+i10*10+i5*5>n) break;
  20. for(int i1=0;i1<=max[5];i1++){
  21. if(i100*100+i50*50+i20*20+i10*10+i5*5+i1>n) break;
  22. result++;
  23. }
  24. }
  25. }
  26. }
  27. }
  28. }
  29. System.out.println(result);
  30. }

牛客网看到的答案

  1. public class Main {
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. int n = sc.nextInt();
  5. if (n == 0) {
  6. System.out.println(0);
  7. return;
  8. }
  9. int[] v = new int[]{1, 5, 10, 20, 50, 100};
  10. long[] dp = new long[n + 1];
  11. dp[0] = 1;
  12. for (int i : v) {
  13. for (int j = i; j <= n; j++) {
  14. dp[j] += dp[j - i];
  15. }
  16. }
  17. System.out.println(dp[n]);
  18. }
  19. }

3.本来是杂乱无章的一个int(比如是4 7 8 9),输入给出每个分组1 2 0 1 输出 0 1 1 2这样的非递减数列(实际就是排序)但是题里没说除了0 1 2还有别的分组!我竟然没有排序!而是去统计0 1 2 的数量 然后输出!最后只通过60% 

从题里真的看不出来 除了0 1 2还有别的组号 真是哭了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/134309
推荐阅读
相关标签
  

闽ICP备14008679号