2014-08-27 27 views
-4

代碼接受一個數字作爲輸入,並返回一個數輸出根據給定的系列:解決烏托邦樹,代碼有什麼問題?

輸入

1 2 3 4 5 6 7 8 9 

輸出

2 3 6 7 14 15 30 31 62 

守則

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    int test,y[10],i,j,newvalue = 0; 
    scanf("%d",&test); 

    for(i=1;i<=test;i++) 
    { 
     scanf("%d\n",&y[i]); 
     for (j=0 ; j<=y[i] ;j++) 
     { 
      if (j %2 ==0) 
       newvalue =newvalue +1; 
      else 
       newvalue = newvalue*2; 
     } 
     printf("%d\n",newvalue); 
    } 
    return 0; 
} 
+0

首先請告訴我們,什麼是錯的輸出。 – Pieter21 2014-08-27 09:09:05

+0

它編譯?它會崩潰嗎?它會輸出錯誤嗎?怎麼了? – 2014-08-27 09:12:58

+0

我猜測給定的輸入條件中,代碼'test'變量的輸入缺失,必須是9! – 2014-08-27 09:13:42

回答

0
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    int test,y[10],i,j; 
    scanf("%d",&test); 

    for(i=1;i<=test;i++) 
    { 
     int newvalue = 0; //Here 
     scanf("%d\n",&y[i]); 
     for (j=0 ; j<=y[i] ;j++) 
     { 
      if (j %2 ==0) 
       newvalue =newvalue +1; 
      else 
       newvalue = newvalue*2; 
     } 
     printf("%d\n",newvalue); 
    } 
    return 0; 
} 
+0

謝謝大家的投入....對不起,我沒有很好地解釋我的問題,但我得到了我的答案: ) – user3315556 2014-08-27 10:14:34

+1

'scanf(「%d \ n」,&y[i]);' - >'scanf(「%d」,&y[i]);' – BLUEPIXY 2014-08-27 13:09:59

0

更換

for (j=0 ; j<=y[i] ;j++) 
{ 
    if (j %2 ==0) 
     newvalue =newvalue +1; 
    else 
     newvalue = newvalue*2; 
} 

if (y[i] %2 ==0) 
    newvalue =newvalue +1; 
else 
    newvalue = newvalue*2; 

試試這個代碼:

int main() 
{ 
    int test,y[10],i,j,newvalue = 0; 
    scanf("%d",&test); 

    for(i=1;i<=test;i++) 
    { 
     scanf("%d\n",&y[i]); 
     if (y[i] %2 ==0) 
      newvalue =newvalue +1; 
     else 
      newvalue = newvalue*2; 
     printf("%d\n",newvalue); 
    } 
    return 0; 
} 
0

首先,重命名 '測試' 到 'numberOfOutputs' 或 'numberOfInputs' 澄清你碼。

我不知道你的y []數組是用來做什麼的,所以也要爲它提供一個描述性的名字。是否要顯示10個不同計算的數字?

另外一個'for-loop'從0開始,使用'< ='是可疑的。可能你只需要'<'。

我也不明白你想用newValue初始化做什麼。您可能想要將其移入第二個for循環。否則,它會全部累積。

0
#include <stdio.h> 

int main(){ 
    int num, i,max = 0, newvalue = 1; 

    scanf("%d", &num); 
    int in[num]; 

    for(i=0;i<num;++i){ 
     scanf("%d", &in[i]); 
     if(max < in[i]) 
      max = in[i]; 
    } 
    int seq[max]; 
    for(i=1;i<=max;++i){ 
     if(i % 2 == 0) 
      newvalue = newvalue + 1; 
     else 
      newvalue = newvalue * 2; 
     seq[i-1] = newvalue; 
    } 
    for(i=0;i<num;++i) 
     printf("%d ", seq[in[i]-1]); 
    printf("\n"); 

    return 0; 
}