天天看点

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++ 实现数字黑洞

继续阅读