2014-03-26 61 views
2
static void collatz(int i) 
{ 
    int x=0,a=0,res=0,count=0; 
    int array[50]; 
    array[0]=i; 
    while(array[count]!=0) 
    { 
     if(array[count]%2==0) 
     { 
      count++; 
      array[count]=i/2; 
     } 
     else 
     { 
      count++; 
      array[count]=3*array[count-1]-1; 
     } 
    } 
} 
int main() 
{ 
    int a; 
    scanf("%d",&a); 
    collatz(a); 
    system("pause"); 
    return 0; 
} 

當我編譯並運行代碼時,我輸入8作爲「a」並且控制檯壓縮自己。我正在使用dev c。 對不起,我可怕的英語,但我希望我很清楚。collat​​z c代碼邏輯錯誤

+1

嘗試:'而(!陣列[COUNT] = 0 &&計數<50)' –

+0

@YohanesKhosiawan許先漢8在Collat​​z序列是8 4 2 1,所以不能與計數 –

+1

如果問題這就是他想要的,'array [count] = i/2;'應該是'array [count] = array [count-1]/2;'.. –

回答

0

我算四個錯誤:

  • 循環應該結束時array[count]1,不0
  • 你應該檢查count小於49
  • array[count]=i/2應該array[count]=array[count-1]/2
  • array[count]=3*array[count-1]-1應be array[count]=3*array[count-1]+1

因此這些已修復的問題,以及一些輕微的縮短代碼,可能是:

static void collatz(int i) { 
    int count=0; 
    int array[50]; 
    array[0]=i; 
    while (count < 49) { 
     int j = array[count++]; 
     if (j == 1) 
      break; 
     else if(j % 2 == 0) 
      array[count]=j/2; 
     else 
      array[count]=3*j+1; 
    } 
} 
0

第一,while循環是錯誤的,你應該結束了,而當array[count] == 1,所以你可以使用while(array[count] > 1)測試。

秒,array[count]=i/2;是錯的,你應該使用array[count]=array[count-1]/2;

三,您應該檢查count < 50,因爲您聲明int array[50];

static void collatz(int i) 
{ 
    int x=0,a=0,res=0,count=0; 
    int array[50]= {0}; 
    array[0]=i; 
    while(array[count] > 1 && count < 50) 
    { 
     if(array[count]%2==0) 
     { 
      count++; 
      array[count]=array[count-1]/2; 
     } 
     else 
     { 
      count++; 
      array[count]=3*array[count-1]-1; 
     } 
    } 
}