2016-07-24 80 views
-2

我正在解決在線裁判中的問題,並且遇到問題。我認爲我的代碼是正確的,但不幸的是法官說錯了答案。我在哪裏犯錯了?對於每個測試用例,輸入一個整數n(0 <= n <= 10)

Habib在過去的幾天裏已經學到了很多關於編程的知識!今天,他面臨一個新的挑戰,處理測試用例的輸入!爲此,他必須解決一組輸入,並且對於每個輸入h必須生成一個輸出。除了計算階乘之外,還有什麼比練習更好?!整數N的階乘是通過將所有來自1 to N的整數相乘來計算的。例如,4!(4階乘)計算爲 - 1x2x3x4=24。在這個問題中,Habib需要解決定義數量的測試用例的一組輸入問題。例如,如果testcase = 3,那麼他必須採取3組輸入並生成3組所需的輸出,一個輸出爲一個輸入。幫助他解決問題。

輸入

輸入開始,該標記所要解決的輸入或測試案例數目的整數測試(0 <試驗< 100)。對於每個測試用例,輸入一個整數n(0 < = n < = 10)。

輸出

對於每個測試用例在格式的單個線生成輸出:Case x: y,其中x是測試用例數和y是用於計算n中的答案!

#include <stdio.h> 
int main() 
{ 
    int i,Test,n=0,x,j,y,s=1; 
    scanf("%d",&Test); 
    for(i=1;i<=Test;i++) 
    { 
     scanf("%d",&n); 
     for(j=1;j<=n;j++) 
     { 
      s=s*j; 
     } 
     printf("Case %d: %d\n",i,s); 
    } 
    return 0; 
} 
+1

「我覺得我的代碼是正確的」爲什麼地球上你認爲這個代碼是正確的?你沒有做任何測試嗎? – MikeCAT

+0

題外話:你的任務不是爲他寫代碼,而是幫他解決問題。在線判斷系統壞的問題... – MikeCAT

回答

2

您忘記了爲每個測試用例重置s

嘗試在scanf("%d",&n);之後加入s=1;

0

Input輸入開始,該標記所要解決的輸入或測試案例數目的整數測試(0 <試驗< 100)。對於每個測試用例,輸入一個整數n(0 < = n < = 10)。

您的代碼不反映這點。你一定要檢查是否輸入是有效還是無效,方式可以是:

if(Test < 100 && Test > 0){ 
    //do something 
}else{ 
    printf("Invalid input!"); 
    } 

此外,你還應該考慮與任何資本變量名或僅小寫,例如住:int test,nint Test, N。混合都使更大的項目是一個猜謎遊戲,當你需要在幾天後編輯它。

現在到你的任務: 基本上你的任務是找到n!並做X次。

正如@MikeCat所說,你永遠不會重置你的s,這是你的因子的起點。

#include <stdio.h> 
int main(){ 
int i,test,n=0,x,j,y,s=1; 
scanf("%d",&Test); 
if(!(test <100 && test > 0)){ 
    printf("Invalid input!"); 
} 
for(i=1;i<=test;i++) 
{ 
    scanf("%d",&n); 
    s = 1; 
    for(j=1;j<=n;j++) 
    { 
     s=s*j; 
    } 
    printf("Case %d: %d\n",i,s); 
} 
return 0; 
} 

這應該可以做到。

0

更改代碼

#include <stdio.h> 
int main() 
{ 
    int i,Test,n=0,x,j,y; 
    scanf("%d",&Test); 
    for(i=1;i<=Test;i++) 
    { 
     int s=1;//observe this 
     scanf("%d",&n); 
     for(j=1;j<=n;j++) 
     { 
      s=s*j; 
     } 
     printf("Case %d: %d\n",i,s); 
    } 
    return 0; 
} 
+0

在你觀察這個之後,如果用戶輸入'2147483647'作爲'n'(或者'Test')?你的*輸入驗證*在哪裏? (例如,檢查'scanf'的返回並驗證'Test'和'n'是否在適當的範圍內?) –

+0

@ DavidC.Rankin,但問題清楚地提到輸入案例中的'0 <= n <= 10' 。這意味着輸入文件只包含0到10 **之間的**,並且在線裁判可以確保這一點。您不需要明確確保在代碼中。 – yobro97

+0

這就是爲什麼沒有downvote,但傳統上,如果提供完整的示例代碼(如你所做的那樣),你將需要提供一個最小完整的驗證示例,以便爲正在幫助的新程序員提供適當的指導。 –

相關問題