黑洞数

来源:互联网 发布:魔术手机拍照软件 编辑:程序博客网 时间:2024/04/28 18:11

黑洞数:

是指于四位数中,只要数字不完全相同,将数字由大到小的排列减去由小到大的排列。假设一开始选定的数字为x_1x_2=f(x_1),x_3=f(x_2),...,x_n=f(x_{n-1}) 用同样的规则继续算下去,最后的结果一定是6174。 比如说一开始选定9891,则f(9891)=9981-1899=8082,f(8820)=8820-0288=8532,f(8532)=8532-2358=6174,f(7641)=7641-1467=6174~
其他的四位数经过这样一系列的运算后,在七步之内都会对应到6174。这种现象类似黑洞(进去后就出不来了),故称为黑洞数。

其它位数的状

其实并非只有四位数有这样的状况,三位数也有一数495,任何三位数经过这样的运算都会对应到495。其它位数就没有像三位数及四位数这样单纯的状况,会对应到不只一种结果,或是进入数字循环(即数个数循环对应)。
5位数的状况:没有黑洞,有3个循环

71973\to83952\to74943\to62964\to71973
82962\to75933\to63954\to61974\to82962
53955\to59994\to53955

6位数的状况:有2个黑洞631764、549945,还有1个7个成员的循环

420876\to851742\to750843\to840852\to860832\to862632\to642654\to420876

7位数的状况:没有黑洞,只有1个8成员的循环

7509843\to9529641\to8719722\to8649432\to7519743\to8429652\to7619733\to8439522\to7509843
8位数的状况:有2个黑洞63317664、97508421

9位数的状况:有2个黑洞554999445、864197532

10位数的状况:有3个黑洞6333176664、9753086421、9975084201

6174问题
时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234执行顺序是1234->3087->8352->6174->6174,输出是4

输入
第一行输入n,代表有n组测试数据。
接下来n行每行都写一个各位数字互不相同的四位数
输出
经过多少次上面描述的操作才能出现循环
样例输入
11234
样例输出
4
 #include<stdio.h>int main(){int n;int a[4], c1, c2,c3;int tmp;int i, j;int count;scanf("%d",&n);while(n--){count = 0;scanf("%1d%1d%1d%1d",&a[0],&a[1],&a[2],&a[3]);while(c3 ){//printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]);count++;for(i = 0; i < 3; i++)    for(j = i + 1; j < 4 ; j++){if(a[i] < a[j]){tmp = a[i];a[i] = a[j];a[j] = tmp;}}c1 = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];c2 = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0];c3 = c1 - c2;if(c3 == 6174){printf("%d\n",count + 1);break;}a[0] = c3 / 1000;a[1] = c3 % 1000 / 100;a[2] = c3 % 100 /10;a[3] = c3 % 10;}}return 0;}        


原创粉丝点击