卡布列克數(Kaprekar number)
黑洞數也稱為卡布列克常數,是指一種專指四位數的特定函數關係,在某排列順序後,其演算式最後都會對應到6174。
黑洞數是指於四位數中,只要數字不完全相同,將數字由大到小的排列減去由小到大的排列。
例如:2381,經大到小排列可以列出,Max = 8321、min = 1238
8321 - 1238 = 7083 ; Max = 8730、min = 0378
8730 - 0378 = 8352 ; Max = 8532、min = 2358
8532 - 2358 = 6174 ;
這四位數字經過連續的運算後,最終都會在七次運算之內對應到6174。
using System.Linq;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("請輸入4位數整數:");
int x = Convert.ToInt32(Console.ReadLine());
//驗證數字
Console.WriteLine(String.Format("{0}驗證結果如下:", x));
//驗證資料是不是4位數字,使用Linq..記得using System.Linq
if (!x.ToString().All(Char.IsDigit) || x.ToString().Length != 4)
{
Console.WriteLine(String.Format("輸入的{0}不是4位數字:", x));
}
else
{
if (x % 1111 == 0)
{
Console.Write("數字全部相同!!");
}
else
{
int flag = 0;
int input = x;
do
{
input = maxmin(analysis(input));
flag++;
} while (input != 6174);
if (input == 6174)
{
Console.WriteLine(String.Format("計算了{0}次,結果值為真:", flag));
}
else //不滿足
{
Console.WriteLine(String.Format("結果值為假:"));
}
}
}
Console.ReadLine();
}
//分解4位數字
public static int[] analysis(int var)
{
int[] a = new int[4];
a[0] = var / 1000; //千位數
var = var % 1000; //百位數
a[1] = var / 100;
var = var % 100; //十位數
a[2] = var / 10;
var = var % 10; //個位數
a[3] = var;
Array.Sort(a); //從小到大排序
return a;
}
//求最大值減最小值以後的數字
public static int maxmin(int[] a)
{
Array.Sort(a);
int max = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0];
int min = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
Console.WriteLine(string.Format("{0} - {1} = {2}", max, min, max - min));
return max - min;
}
}
三位數也有一數495,任何三位數經過這樣的運算都會對應到495。
水滴可成涓流,涓流可成湖泊大海。
汲取累積知識,將知識堆積成常識;將常識探究成學識;將學識簡化為知識;授人自省。