C / C ++プログラミング学習-第7週③角谷予想

トピックリンク

タイトル説明

スアントウ氏:いわゆる角谷予想とは、正の整数の場合は奇数の場合は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 / C ++プログラミング学習-第7週①(a + b)* cの値を計算します

C / C ++プログラミング学習-第7週②(a + b)/ cの値を計算します

C / C ++プログラミング学習-第7週③角谷予想

C / C ++プログラミング学習-7週目④カクテルセラピー

C / C ++プログラミング学習-7週目⑤指定した番号と同じ番号の番号

C / C ++プログラミング学習-7週目⑥集合写真効果

C / C ++プログラミング学習-7週目△ワードフリップ

おすすめ

転載: blog.csdn.net/qq_44826711/article/details/112912148