当前位置:   article > 正文

【2023华为od机考】算法题答案记录200分_华为od题目200分

华为od题目200分

200分题

1 不含101的数 TODO

这个要满分有点难, 先写个暴力, 据说暴力 120分

java

  1. import java.util.*;
  2. //不含101
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int l = sc.nextInt();
  7. int r = sc.nextInt();
  8. int cnt = 0;
  9. for(int i = l ; i <= r; i ++ ) {
  10. String s = Integer.toBinaryString(l);
  11. if(!s.contains("101")) cnt ++ ;
  12. }
  13. System.out.println(cnt);
  14. }
  15. }

2 取出尽量少的球

java

  1. import java.util.*;
  2. //取出尽量少的球
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner sc = new Scanner(System.in);
  6. int sum = sc.nextInt();//球的总数
  7. int n = sc.nextInt();//桶的个数, 数组长度
  8. int[] ints = new int[n];
  9. int cnt = 0;
  10. int max_num = 0;
  11. for(int i = 0; i < n; i ++ ) {
  12. ints[i] = sc.nextInt();
  13. cnt += ints[i];
  14. max_num = Math.max(ints[i], max_num);
  15. }
  16. //球小于sum的情况
  17. if(cnt <= sum) {
  18. System.out.println("[]");
  19. return;
  20. }
  21. //超过sum的情况
  22. int max_Capacity = 0;//求最大的容量 max_Capacity 满足 总数 < sum
  23. //容量的范围:
  24. int min = sum / n;//取整ok
  25. int max = max_num;
  26. int total = 0;
  27. for(int i = max; i >= min; i -- ) {
  28. for(int j = 0; j < n; j ++ ) {
  29. // if(ints[j] > i)
  30. // total += i;
  31. // else
  32. // total += ints[j];
  33. total += Math.min(i, ints[j]);
  34. }
  35. if(total <= sum) {
  36. for(int j = 0; j < n; j ++ ) {
  37. ints[j] = Math.max(0,ints[j] - i);
  38. }
  39. System.out.println(Arrays.toString(ints));
  40. return;
  41. }
  42. total = 0;
  43. }
  44. }
  45. }

6 分奖金

考到这道题了哈哈 

简单

java

  1. import java.util.*;
  2. public class Main {
  3. public static void main(String[] args) {
  4. Scanner sc = new Scanner(System.in);
  5. int n = sc.nextInt();//10000人
  6. int[] self = new int[n];//员工分到的随机金额
  7. for(int i = 0; i < n; i ++ ){
  8. int sj = sc.nextInt();//随机的值 1-100000
  9. self[i] = sj;
  10. }
  11. for(int i = 0; i < n - 1; i ++ ){
  12. int res = 0;
  13. boolean flag = false;
  14. for(int j = i + 1; j < n; j ++ ) {
  15. if(self[i] < self[j]) {//往后的每一个数字都遍历一下
  16. res = (j - i) * (self[j] - self[i]);
  17. flag = true;
  18. break;
  19. }
  20. }
  21. if(!flag) res = self[i];
  22. System.out.print(res);
  23. System.out.print(" ");
  24. flag = false;
  25. }
  26. System.out.println(self[n-1]);
  27. }
  28. }

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

闽ICP备14008679号