2016-08-04 101 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枚盧比硬幣而言,發生這種情況的乘客可能不得到正確的改變。
  • 爲了嘗試最大限度地提高乘客人數,您應該對需要較少更改的乘客進行更改。按照編碼,如果乘客支付了大量費用,您可能會用盡太快。
  • 您計算乘客的方式不正確:您仍然有變化的事實並不意味着乘客已經送達,最後一位送達的乘客可能錯誤地不計數。
相關問題