黑洞数是指于四位数中,只要数字不完全相同,将数字由大到小的排列减去由小到大的排列。假设一开始选定的数字为,
=f(
),
=f(
),...,
=f(
) 用同样的规则继续算下去,最后的结果一定是6174。 比如说一开始选定9891,则f(9891)=9981-1899=8082,f(8820)=8820-0288=8532,f(8532)=8532-2358=6174,f(7641)=7641-1467=6174~
其他的四位数经过这样一系列的运算后,在七步之内都会对应到6174。这种现象类似黑洞(进去后就出不来了),故称为黑洞数。
除此以外,三位数也有一个类似的黑洞数495
5位数的状况:没有黑洞,有3个循环
7197383952
74943
62964
71973
8296275933
63954
61974
82962
5395559994
53955
6位数的状况:有2个黑洞631764、549945,还有1个7个成员的循环
420876851742
750843
840852
860832
862632
642654
420876
7位数的状况:没有黑洞,只有1个8成员的循环
75098439529641
8719722
8649432
7519743
8429652
7619733
8439522
7509843
8位数的状况:有2个黑洞63317664、97508421
9位数的状况:有2个黑洞554999445、864197532
10位数的状况:有3个黑洞6333176664、9753086421、9975084201
以上转自维基百科:https://zh.wikipedia.org/wiki/%E9%BB%91%E6%B4%9E%E6%95%B8
5位黑洞数题目:
五位黑洞数
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。
求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。
如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:82962 75933 63954 61974 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 0,这个可以不考虑。
循环圈的输出格式仿照:
82962 75933 63954 61974
其中数字的先后顺序可以不考虑。
package work;import java.util.Arrays;
import java.util.Scanner;import javax.naming.ldap.SortControl;public class A60 {static int [] vis=new int[100000];public static int cha(int n)//求一个数的最大数与最小数的差{int[] a=new int[100];int i=0;int ans1=0;int ans2=0;int sub=0;while(n!=0){int r=n%10;a[i]=r;i++;n/=10;}Arrays.sort(a, 0,i);for(int j=0;j<i;j++){ans1=a[0]+a[1]*10+a[2]*100+a[3]*1000+a[4]*10000;ans2=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];} sub=ans1-ans2;//System.out.println(sub);return sub;}public static void circle(int n){int x=n;int k=0;int[] b=new int[1000];while(true){int flag=1;x=cha(x);//两个数的差b[k]=x;k++;for(int i=0;i<k-1;i++){if(b[i]==b[k-1]){//if(vis[b[i]]==0)flag=0;int flag1=0;for(int j=i;j<k-1;j++){if(vis[b[j]]==0){if(j==i)System.out.print("[");if(j==k-2)System.out.print(b[j]);elseSystem.out.print(b[j]+",");vis[b[j]]=1;flag1=1;}elsebreak;}if(flag1==1){System.out.print("]");System.out.println();}break;}}if(flag==0){break;}}}public static void main(String [] args){int n;Scanner cin=new Scanner(System.in);for(int i=10000;i<=99999;i++){circle(i);}}}