2016-08-04 68 views
-2

我刚刚开始学习C并在线做实践。 该网站告诉我,我提交的代码为this question on codechef.com是错误的。有人可以帮我理解为什么这段代码不工作吗?

但是,当我在我的Mac终端上运行代码时,它工作的很好!

任何人都可以帮助我了解哪里出了问题?谢谢一堆!此外,有没有人知道任何网站,我可以问别人帮助调试或改进代码?

#include <stdio.h> 

int main() { 
    int T, N; 
    scanf("%d", &T); 
    int ans[T]; 
    for (int i = 0; i < T; i++) { 
     int max = 0; 
     long long P, Q; 
     scanf("%d %lld %lld", &N, &P, &Q); 
     long long A[N]; 
     for (int j = 0; j < N; j++) { 
      scanf("%lld", &A[j]); 
     } 

     for (int k = 0; k < N; k++) { 
      int quo = A[k]/2; 
      int r = A[k] % 2; 
      if (Q == 0 && quo > 0) { 
       P = P - ((2 * quo) + r); 
      } else { 
       Q -= quo; 
       P -= r; 
      } 
      if ((P >= 0) && (Q >= 0)) { 
       max++; 
      } 
     } 
     ans[i] = max; 
    } 
    for (int m = 0; m < T; m++) { 
     printf("%d\n", ans[m]); 
    } 
} 
+3

发布代码可以是一个很好的起点.... – LPs

+1

感谢编辑@LPs – b02b01

+2

绝对不会,立刻就会被抨击为脱离主题。代码需要在CR上工作。这个问题对于StackOverflow来说也有点太开放了。 OP,您需要生成一个MCVE - 最小,完整,可验证的示例。至少,你需要解释你试图解决你所遇到的问题。 “解决这个问题”是关于SO的话题。 –

回答

0

本地自动阵列不需要int ans[T];,可以输出结果,当您计算它们。 T可能与9999999一样大,分配这样一个具有自动存储的大型阵列可能会在具有有限堆栈空间的系统上调用未定义的行为(< 4 MB)。

您在Mac上运行的测试与codechef执行的测试不同。他们可能会通过传递大量测试用例来破坏程序。

而且,你的算法有多种缺陷:

  • 你尝试给2枚卢比硬币的变化尽可能地,但是当你用完了2枚卢比硬币而言,发生这种情况的乘客可能不得到正确的改变。
  • 为了尝试最大限度地提高乘客人数,您应该对需要较少更改的乘客进行更改。按照编码,如果乘客支付了大量费用,您可能会用尽太快。
  • 您计算乘客的方式不正确:您仍然有变化的事实并不意味着乘客已经送达,最后一位送达的乘客可能错误地不计数。
相关问题