📜  TurboHire 实习面试经历

📅  最后修改于: 2021-11-18 01:16:14             🧑  作者: Mango

第 1 轮(1 小时 30 分钟):由 3 道编码问题组成。

编码问题是:

  1. 出货量 1

    Byteland港口有N艘船。 Bob 是港口的主管。他的工作是给船装载一些货物。他没有浪费任何时间,将一些随机重量的货物装上洗船。但是,所有船的船长都决定,除非每艘船的货物重量相同,否则他们不会取货。现在要以尽可能少的动作来解决这个问题,否则他会遇到麻烦。一次移动意味着将一吨货物从一艘船转移到另一艘船上。他需要你的帮助来找到最少的移动次数。

    输入:第一行由一个整数 N (1<=N<=10^4) 组成,即船舶数量,下一行由每艘船的当前货物重量组成 (1<=W<=10^4) .

    输出:打印最小移动次数,如果每艘船的重量不可能相等,则打印 -1。

    我提交的代码是,

    C++
    #include 
    using namespace std;
    int main ()
    {
        int n;
        cin >> n;
        int a[n];
        int s=0;
        for(int i=0;i> a[i];
            s=s+a[i];
        }
        if(s%n!=0)
        cout << -1 <<"\n";
        else
        {
            int k=s/n;
            int s1=0;
            int ans=0;
            for(int i=0;ik)
                {
                    s1=s1+(a[i]-k);
                }
                else
                {
                    ans=ans+abs(a[i]-k);
                    s1=s1-abs(a[i]-k);
                }
            cout << ans <<"\n";
        } 
    }


    C++
    #include 
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        int arr[n][n];
        for (int i = 0; i < n; i++) {
      
            for (int j = 0; j < n; j++) {
                arr[i][j] = j + 1;
            }
        }
      
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
      
                if ((i + j) == (n - 1))
                    cout << '*';
                else
                    cout << arr[i][j];
            }
            cout << "\n";
        }
        return 0;
    }


    C++
    #include 
    #include 
    #include 
    using namespace std;
    int main()
    {
        int x, y, minm, maxm, res;
        cin >> x >> y;
        minm = std::min(x, y);
        maxm = std::max(x, y);
        res = ceil((maxm * 1.0) / (minm + 1));
        cout << res;
        return 0;
    }


    上述解决方案通过了所有样本和隐藏的测试用例。

  2. 升星

    分析示例中给出的输入 N 的输出。编写一个程序来打印类似的模式。

    输入:一行包含一个整数,N

    输出:从样本中推断出的星号“*”和数字模式。

    约束条件: 0

    C++

    #include 
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        int arr[n][n];
        for (int i = 0; i < n; i++) {
      
            for (int j = 0; j < n; j++) {
                arr[i][j] = j + 1;
            }
        }
      
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
      
                if ((i + j) == (n - 1))
                    cout << '*';
                else
                    cout << arr[i][j];
            }
            cout << "\n";
        }
        return 0;
    }
    

    上述解决方案通过了所有样本和隐藏的测试用例。

  3. 男生和女生

    你有 x 没有男孩和 y 没有女孩。您必须将它们排成一条直线,以便最少数量的男孩和最少数量的女孩站在一起。输出以上两个最小值的最大值。

    输入:两个整数x,y,即男孩和女孩的编号。

    输出:男孩和女孩站在一起的最大最小值。

    C++

    #include 
    #include 
    #include 
    using namespace std;
    int main()
    {
        int x, y, minm, maxm, res;
        cin >> x >> y;
        minm = std::min(x, y);
        maxm = std::max(x, y);
        res = ceil((maxm * 1.0) / (minm + 1));
        cout << res;
        return 0;
    }
    

    上述解决方案通过了所有样本和隐藏的测试用例。

第二轮(30分钟):这一轮只是简单地讨论了第一轮,还有一些编码问题,我只需要讲逻辑和方法。

问题是:

  1. x 没有汽车,它们的速度在一个数组中给出。您必须计算一辆车战胜另一辆车的次数。例 [5,4,3] 是速度数组,速度为 5 的汽车克服了另外两个,所以答案是 2。
  2. 您将获得 2 个链表,您必须返回两个链表交集的节点值。

我能够说出第一个问题的方法,但未能回答第二个问题。

最终裁决:已选择