最初の整数が x であるとします。次に、a[0]=x を定義すると、シーケンスの次の要素は次のように計算されます。
a[n+1]=a[n]/2 if a[n] is even, and
a[n+1]=a[n]*3+1 if a[n] is odd.
The sequence continues till it reach value 1, then stop.
こんな感じ75, 226, 113, 340, 170, 85, 256, 128, 64, 32, 16, 8, 4, 2, 1
これは私のコードです(再帰を使用していません)。問題は、常に output=1 を出力し続けることです。確認しましたが、どこが間違っていたのかわかりません。別の質問は、変数 x と配列 a[] に対して宣言するのに最適なデータ型はどれかということです (最小の容量に最小化するには?そして、再帰を使用してこれを行うにはどうすればよいでしょうか?
int main(void)
{
float a[100];
int i=0;
float x;
printf("Enter the value of x: ");
scanf("%f",&x);
a[0]=x;
printf("\n%f\n",a[0]);
do{
if (fmod(a[i],2)==0){
a[i+1]=a[i]/2;}
else{
a[i+1]=a[i]*3+1;
}
i++;
} while (a[i]!=1);
printf("The ouput value is:\n");
for (int j=0;j<i;j++){
printf("%2.2f\t",a[i]);
}
getch();
return 0;
}