タイトル説明
スアントウ氏:いわゆる角谷予想とは、正の整数の場合は奇数の場合は3を掛け、偶数の場合は1を足し、2で割ると結果が繰り返されるという意味です。上記のルールに従って、最終的に1が常に取得されます。たとえば、初期整数が5であると仮定すると、計算プロセスはそれぞれ16、8、4、2、および1になります。
プログラムは整数の入力を必要とし、1を取得するために処理されたプロセスを出力します。
入力形式
正の整数N(N≤2,000,000)。
出力形式
整数の入力から1までのステップは、各ステップが1行で、各セクションで計算プロセスについて説明します。最後の行は「終了」を出力します。入力が1の場合、直接「終了」を出力します。
データは、途中の計算がintの範囲を超えないことを保証します。
サンプル入力
5
サンプル出力
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
アイデア
カクタニ予想とは、正の整数の場合、奇数の場合は3を掛け、偶数の場合は1を足し、2で割ると、上記の規則に従って結果が繰り返されることを意味します。 1は常に取得されます。
したがって、この推測をシミュレートし、1ステップずつ実行して、最後にEndを出力できます。具体的な手順は、最初に変更されていないxを出力し、次にxに対応する変更を加えて、新しいxを取得して出力することです。ビット演算が高速になります。
C言語コード:
#include <stdio.h>
int main()
{
long long x;
scanf("%ld", &x);
while(x != 1)
{
if(x % 2 != 0)
{
printf("%ld",x); //先输出没有变化的x
x = x * 3 + 1; //对x做题目要求的变化
printf("*3+1=%d\n", x); //得到新的x了
}
else
{
printf("%ld", x);
x /= 2;
printf("/2=%ld\n", x);
}
}
if(x == 1) printf("End");
return 0;
}
C ++コード:
#include<bits/stdc++.h>
using namespace std;
int n, flag;
void solve()
{
if(n == 1)
{
cout << "End" << endl;
flag = 0;
}
else
{
if(n & 1)
{
cout << n << "*3+1=";
n = n * 3 + 1;
cout << n << endl;
}
else
{
cout << n << "/2=";
n /= 2;
cout << n << endl;
}
}
}
int main()
{
while(cin >> n)
{
flag = 1;
while(flag)
solve();
}
return 0;
}
C言語の基礎がない学生は、最初にC言語の文法を学ぶことができます。後で整理して送信します。
すでに書いています。C言語のプログラミング列に移動して、最初の内容を確認できます。週。
今週の他の演習:
C / C ++プログラミング学習-第7週①(a + b)* cの値を計算します
C / C ++プログラミング学習-第7週②(a + b)/ cの値を計算します
C / C ++プログラミング学習-7週目④カクテルセラピー