昨晚看了一篇公众号的文章:https://mp.weixin.qq.com/s/idzZVuncx3XPcQwEZ4C3cg
上面有介绍数字黑洞“6174”,论坛上也有很多,大概的历史由来不在赘述,随便找一个数如“1314”,看下图足矣:
其中,流程分两步,一步是自己输入一个数字不全相同的四位数(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;
}
}
附上部分的调试结果: