天天看點

C++ 實作數字黑洞

昨晚看了一篇公衆号的文章:https://mp.weixin.qq.com/s/idzZVuncx3XPcQwEZ4C3cg

上面有介紹數字黑洞“6174”,論壇上也有很多,大概的曆史由來不在贅述,随便找一個數如“1314”,看下圖足矣:

C++ 實作數字黑洞

其中,流程分兩步,一步是自己輸入一個數字不全相同的四位數(1111,2222等等的不要),由程式計算出數字黑洞;然後由程式随機出100個四位數,分别算數數字黑洞,最後如果這些數的數字黑洞都是同一個數,說明這樣的數字黑洞是存在的!

如果要更嚴謹的話,應該周遊所有的四位數,要實作起來也很簡單,隻是我想練習使用随機數的代碼而已~

po上自己寫的代碼,跟大家交流!

#include <iostream>
#include <cmath>
#include <random>
using namespace std;

int new_quard_diff(int quard)
{
	int a[4];
	int new_quard_max;
	int new_quard_min;
	a[0] = quard / 1000 % 10;
	a[1] = quard / 100  % 10;
	a[2] = quard / 10   % 10;
	a[3] = quard / 1    % 10;
	sort(a, a + 4, greater<int>());//由大到小排列
	new_quard_max = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
	new_quard_min = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0];
	return new_quard_max - new_quard_min;
}

int main()
{	
	int a,b,i;
	cout << "請輸入一個四位數:";
	cin >> a;   //輸入一個不全相同的四位數
	while (a != new_quard_diff(a))
	{
		a = new_quard_diff(a);
	}
	cout << "結果停留在:" << a<<"\n";


	default_random_engine e;
	uniform_int_distribution<unsigned> u(1000, 9999); //随機數分布對象
	int count_n = 0;//計數
	for (i = 0; i < 100; i++) //随機抽取100個四位數
	{
		b = u(e);
		while (new_quard_diff(b) == 0)//防止出現四個數字相同的數
		{
			b = u(e);
		}
		cout << "随機生成一個四位數:" << b << "\n";
		while (b != new_quard_diff(b))
		{
			b = new_quard_diff(b);
		}
		count_n++;
	}
	if (count_n == 100)
	{
		cout << "100次随機數的結果停留在:" << b << "\n\n";
	}
	if (a == b)
	{
		cout << "結論:數字黑洞是:" << a;
	}

}
           

附上部分的調試結果:

C++ 實作數字黑洞

繼續閱讀