当前位置:   article > 正文

大疆笔试0804_大疆笔试编程题多组输入如何实现

大疆笔试编程题多组输入如何实现

岗位:后端研发

笔试两种题型:12道不定项选择和三道编程题

第一题:

    输入:多组测试数据。每组测试数据如下

                第一行输入三个整数:N、A、X,分别代表需要解决的bug数量、喝咖啡之后效率提升的倍数、一天最多可以喝掉的咖啡数

                第二行输入N个整数,表示在不喝咖啡的情况下解决这些八阿哥所需的时间t1, t2, ..., tN

    输出:如果能在八小时内解决这些bug(如果时间为小数,向上取整),输出解决bug的时间,否则输出0

    case:input: 

          8 2 8

          60 60 60 60 60 60 60 60

          4 3 3

          333 77 100 13

         output:

          240

          175

第二题:

    输入:多组测试数据

            第一行输入两个整数T、N,分别代表钱数和零食种类数。

            接下来的N行,每行输入三个整数ai, bi, ci(1 <= i <= N) ,代表零食的价格、零食的满意度、零食的数量

    输出:求出最大满意度

    case:input

            100 2

            1 1 1

            1 1 1

            100 3

            26 100 4

            5 1 4

            5 2 2

        output

            2

            306

第三题:单源最短路径问题 (迪杰斯特拉算法)用代码实现遇到麻烦 题目和测试用例都不记得了。此题略过

 

贴上第一题和第二题的代码:

  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. using namespace std;
  5. int main0() {
  6. int N, A, X;
  7. while (!cin.eof()) {
  8. cin >> N >> A >> X;
  9. int tmp;
  10. int time = 0;
  11. int sum = 0;
  12. for (int i = 0; i < N; ++i) {
  13. cin >> tmp;
  14. sum += tmp;
  15. }
  16. int coffeTime = A * X * 60;
  17. if (coffeTime > sum) {
  18. time = ceil((double)(sum) / (double)A);
  19. }
  20. else {
  21. time = sum - coffeTime + ceil((double)(sum) / (double)A);
  22. }
  23. if (time > 480) {
  24. cout << 0;
  25. }
  26. else {
  27. cout << time;
  28. }
  29. }
  30. return 0;
  31. }
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5. struct backpack
  6. {
  7. int p; //价格
  8. int sat; //满意度
  9. } item[2001]; // 零食列表
  10. int main()
  11. {
  12. int money, num;
  13. int price, satisDegree, curNum;
  14. int i, j;
  15. int c;
  16. cin >> money >> num; //money表示总钱数,num表示零食的种类
  17. int index = 0; //拆分后零食的总数 拆分的目的是降低时间复杂度
  18. // 二进制优化的方法
  19. for (i = 1; i <= num; i++)
  20. {
  21. c = 1;
  22. cin >> price >> satisDegree >> curNum; //price表示价格,satisDegree表示满意度,curNum表示该零食的数量。
  23. while (curNum - c>0) // 1 2 4 8 (1-15)
  24. {
  25. curNum -= c;
  26. item[++index].p = c*price;
  27. item[index].sat = c*satisDegree;
  28. c *= 2;
  29. }
  30. item[++index].p = price*curNum; //补充不足指数的差值
  31. item[index].sat = satisDegree*curNum;
  32. }
  33. vector<int> dp(money + 1); //dp[i]代表钱数为i的时候获得的最大满意度
  34. for (i = 1; i <= index; i++) //对拆分后的物品进行0-1背包
  35. {
  36. for (j = money; j >= item[i].p; j--)
  37. dp[j] = max(dp[j], dp[j - item[i].p] + item[i].sat);
  38. }
  39. printf("%d/money", dp[money]);
  40. return 0;
  41. }

 

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

闽ICP备14008679号