【问题标题】:Codility worng answer on TapeEquilibrium for php关于 TapeEquilibrium for php 的 Codility wearg 答案
【发布时间】:2014-04-15 02:32:29
【问题描述】:

我刚刚在 php 中编写了 TapeEquilibrium 问题的解决方案。问题是我对 Codility 提供的自动代码修订得到了一些错误的答案。 完成测试的链接是

https://codility.com/demo/results/demo2G35FU-EJQ/.

知道two elements 错误答案错误是什么吗? 是否有必要为此测试在 php 中键入(类型转换)变量?我的意思是,你如何告诉编译器 X 变量在 php 中是 double 还是 int?非常感谢!

【问题讨论】:

    标签: php


    【解决方案1】:

    两个元素测试用例可能是 {-1000, 1000}。这个数组只能在一个地方拆分,距离为|-1000-1000| = 2000。这个输入的程序返回 0,因为在 for 循环的第二次迭代中,$arr_h 是 0,$sum_total 也是 0。

    只需在循环for ($i = $count_-1; $i > 0 ; $i--) 中更改条件即可获得 100%。

    【讨论】:

      【解决方案2】:

      “两个元素”测试用例是{-1000, 1000},可以进行额外的测试(如果(N == 2))来解决这个问题。 在进入第二个循环之前,应在将起始值设置为 tmp 变量(看看我的示例)之后传递“小元素”测试用例。我的例子是在 C 上的,但它可以很容易地用其他语言实现:

      int TapeEquilibrium(int A[], int N) {
      
          long long sum = 0;
          int i = 0, j = 0;
          int min = 1000;
      
          if (N == 2) {
              return abs(A[0] - A[1]);
          }
      
          for(i = 0; i < N; i++)
          {
              sum += A[i];
          }
      
          long long left = 0;
          long long right = sum;
          int tmp = abs(left - right);
      
          for(j = 1; j < N; j++)
          {
              right -= A[j - 1];
              left += A[j - 1];
              tmp = abs(left - right);
              if (min > tmp)
              {
                  min = tmp;
              }
          }
      
          return min;
      }
      

      【讨论】:

        猜你喜欢
        • 2019-06-30
        • 2016-12-10
        • 1970-01-01
        • 1970-01-01
        • 2018-07-07
        • 1970-01-01
        • 2020-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多