昨晚看了一篇公衆号的文章:https://mp.weixin.qq.com/s/idzZVuncx3XPcQwEZ4C3cg
上面有介紹數字黑洞“6174”,論壇上也有很多,大概的曆史由來不在贅述,随便找一個數如“1314”,看下圖足矣:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TP35UMRRkT5VEVPpHOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL1MjM4MzN1ATMwIDOwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
其中,流程分兩步,一步是自己輸入一個數字不全相同的四位數(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;
}
}
附上部分的調試結果: