2016-07-20 33 views
-1

以下是my solutiona problem on codechef
我在計算機上得到正確的輸出,但沒有在codechef上輸出。
我在我的代碼中找不到錯誤。在CodeChef上切割食譜練習

問題是將數組除以其元素的GCD並將其打印出來。

我寫了下面的代碼:

#include<stdio.h> 

int main(void) 
{ 
    int t,n; 
    scanf("%d",&t); 

    while(t--) 
    { 
    scanf("%d",&n); 
    int a[n],i,divisor,curr,r; 

    for(i=0;i<n;i++) 
    { 
     scanf("%d",&a[i]); 
    } 

    divisor = a[0]; 
    for(i=1;i<n;i++) 
    { 
     curr = a[i]; 
     if(curr<divisor) 
     { 
     divisor = curr; 
     } 
    } 

    for(i=0;i<n;i++) 
    { 
     r = a[i]%divisor; 
     if(r != 0){ 
     divisor = 1; 
     break; 
     } 
    } 

    for(i=0;i<n-1;i++) 
    { 
     printf("%d ",a[i]/divisor); 
    } 

    printf("%d\n",a[n-1]/divisor); 

    } 

    return 0; 
} 
  • t是測試用例的數量。
  • n是數組的長度。
  • a[n]是數組。
  • divisor是數組中所有元素的GCD。
  • curr是目前測試的數字。
  • r是餘數。

採樣輸入

3 
2 4 4 
3 2 3 4 
4 3 15 9 6 

樣本輸出

1 1 
2 3 4 
1 5 3 2 
+3

做一個單獨的函數來計算GCD並使用它。給你的變量實際名稱。通過這兩個步驟,您的bug有更好的機會被明顯或解決。 – Ryan

+4

您被樣本輸入誤導了,GCD不僅僅是數組中最小的元素。一個更好的例子是這個數組有四個元素:{6,9,21,15}。預期產出是:{2,3,7,5}。 – user3386109

+4

請給你的問題一個更好的標題。 「這個代碼有什麼問題?」基本上描述了這個網站上的一切另一個有相同問題的用戶將無法找到這個問題。 –

回答

0

你在正確的軌道以爲這是一個涉及CGD(最大公約數)的運動上。

但是你誤解了如何計算GCD。
它很少是數組中最小的元素。

例如:

15, 6, 9 

最小元件是6並且不是其他元件的公約數(和可能選擇1作爲你的情況的除數),但在這種情況下,滿足gcd是3

您可以從閱讀關於計算一對元素的CGD的一些信息開始。和一個example implementation

然後嘗試弄清楚如何計算數組中所有元素的GCD。

這些提示可以幫助