zoukankan      html  css  js  c++  java
  • 网易有道2018秋季校园招聘-c++

    题型:20单选+3道编程+2道问答

    单选:

    问答:

    编程:

    1、

    分析:这道题算是试水题目,非常简单,没有用到任何高级算法,甚至数据结构都没有太多的涉及到,思路很直接,就是5步以上的每次走5步,5步以下的直接走对应步数,然后求和就是总共需要的次数

    代码:

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 int main()
     5 {
     6     int s;
     7     cin >> s;
     8     if (s <= 5)
     9         cout << 1 << endl;
    10     else if (s % 5 == 0)
    11         cout << s / 5 << endl;
    12     else
    13         cout << s / 5 + 1 << endl;
    14     return 0;
    15 }

    2、

    分析:这道题乍一看不难,但是自己想想还是挺麻烦,这道题在规定时间内我没做出来,我想的思路就是从头遍历,每次翻转之后就对牌面做标记,最后只需要统计被翻转奇数次的牌的数量,这个思路时间空间复杂度都很高,估计要超时,肯定有更好解决办法

    暴力搜索代码:

    1 #include <iostream>
    2 #include <vector>
    3 using namespace std;

    3、

    分析:这道题还是很有意思的,场景是倒香槟,每一层的杯子都有固定容量,满了之后就会到下一层,每次的操作分为两种:1、倒酒,想某一层倒入一定的酒量;2、询问,询问某一层有多少酒。对于每一个询问操作,都需要输出一个数字来回答。两种操作分别用数字1和2来表示。这道题的难点在于如何去分析整个流程,我的做法是用一个vector记录每层容量,用另一个vector表示每一次已经有的酒量,每一次倒酒时,都依次由上到下遍历,一直到最后一层;每次询问时,直接从vector中读取剩余酒量。写完程序才发现其实是有不少坑的,不过我还是在规定时间内完成了,还是比较开心的!

    代码:

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 int main()
     5 {
     6     int n, m;
     7     cin >> n >> m;
     8     vector<int> cap = vector<int>(n+1, 0);
     9     vector<int> remain = vector<int>(n+1, 0);
    10     //vector<bool> full = vector < bool > (n+1, false);   // is full?
    11     for (int i = 1; i <= n; i++)
    12         cin >> cap[i];
    13     for (int i = 1; i <= m; i++)
    14     {
    15         int com;
    16         cin >> com;
    17         if (com == 2) //pour
    18         {
    19             int x, v;
    20             cin >> x >> v;
    21             if (v + remain[x] <= cap[x])
    22                 remain[x] = v + remain[x];
    23             else
    24             {
    25                 int t = v + remain[x] - cap[x];  //duo yu
    26                 for (int i = x; i <= n; i++)  //这里可以做一些优化,循环条件变为 i <= n && t ,意思是当t为0是不再循环,可以减少循环次数
    27                 {
    28                     if (i == x)
    29                     {
    30                         remain[i] = cap[i];
    31                         continue;
    32                     }
    33                     if (t + remain[i] <= cap[i])
    34                     {
    35                         remain[i] = t + remain[i];
    36                         break;
    37                     }
    38                     else
    39                     {
    40                         remain[i] = cap[i];
    41                         t = t - cap[i];
    42                         //t = t - (cap[i] - remain[i]);
    43                     }
    44                 }
    45             }
    46         }
    47         if (com == 1) //ask
    48         {
    49             int k;
    50             cin >> k;
    51             cout << remain[k] << endl;
    52         }
    53     }
    54     return 0;
    55 }

    以上是本次笔试全部内容,有问题或者建议欢迎大家随时交流!

  • 相关阅读:
    /tmp/orbit-oracle/目录inode耗尽
    sp_change_users_login 'Update_One', '用户名', '登录名';
    自动载入Python虚拟环境
    Windows下安装MySQL详细教程
    python版本下载时时,官方目录web-based与executable和embeddable 的区别
    print,printf,println
    大文件文本数据处理
    通过文件指针插入文件内容
    sizeof和strlen的使用
    java八大基本数据类型
  • 原文地址:https://www.cnblogs.com/dapeng-bupt/p/9613999.html
Copyright © 2011-2022 走看看