2017-09-28 8 views
2
#include <stdio.h> 

int main() { 
    int rangeValue; 
    int x; 
    printf("Please input a number to be considered in the range:\n"); 
    scanf("%d", &rangeValue); 
    while (rangeValue != 1) { 
     x = rangeValue; 
     if ((x % 2) == 0) { 
      x = x/2; 
      printf("%d,", x); 
     } else { 
      x = (3 * x) + 1; 
      printf("%d,", x); 
     } 
     rangeValue--; 
    } 
    return 0; 
} 

私の目標は、rangeValueに与える数値から1までのすべての数値のCollat​​zシーケンスを実行することです。私はこれがうまくいくと思った。誰も私がそれを働かせるように助けることができる?Collat​​zの配列が1から所定の値へ

+0

https://ideone.com/Aerc5T –

+1

あなたが1からあなたの範囲の限界までカウントするように一つのループを必要とします。このような値ごとにCollat​​zシーケンスを決定するには、内側(入れ子になった)ループが必要です。新しい値をいつ開始するかをよりよく識別するために、印刷を改善する必要があります(シーケンスの完了後に改行を出力します)。あるいは、より良い方法として、渡された数値に対してCollat​​zシーケンスを出力する関数を書いてから、1..limitの範囲の各値に対してその関数を呼び出すようにしてください。数字の前にカンマを印刷する必要があります(最初のものはおそらく別々に印刷されるでしょう)。 –

答えて

1

印刷する範囲の範囲、最大反復回数、およびシーケンス内の現在の数値を混在させています。ここで

は、コードを修正する方法である:

#include <stdio.h> 

int main(void) { 
    int rangeValue; 
    printf("Please input a number to be considered in the range:\n"); 
    if (scanf("%d", &rangeValue) != 1) 
     return 1; 
    // iterate for all numbers upto rangeValue 
    for (int n = 1; n <= rangeValue; n++) { 
     printf("%d", n); 
     for (long long x = n; x != 1;) { 
      if ((x % 2) == 0) { 
       x = x/2; 
      } else { 
       x = (3 * x) + 1; 
      } 
      printf(",%lld", x); 
     } 
     printf("\n"); 
    } 
    return 0; 
} 
関連する問題