5位数的数字黑洞是多少_5位黑洞数

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。

比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。

循环圈的输出格式仿照:

[82962, 75933, 63954, 61974]

其中数字的先后顺序可以不考虑。

代码如下:

#include

int

n;用于【临时】存储输入的5位数,以及以后计算的最大值和最小值的差值(递归算法)。

int

m[100],flag=0;///m[100]用于存放输入的5位数,以及计算出的最大值和最小值的差值;

///flag用于记录数组m的最后一个不为零的下标(或者说是递归的次数)。

fun()

{

int temp[5];

int i,j,t;

int max=0,min=0;

如果n是四位数则在前面补0

if(n<10000)

temp[0]=0;

temp[0]=n/10000;

temp[1]=n/1000;

temp[2]=n/100;

temp[3]=n/10;

temp[4]=n;

如果五个数字全部相等

if(temp[0]==temp[1] && temp[1]==temp[2]

&&

temp[2]==temp[3] && temp[4]==temp[5])

{

printf("[0]\n");

return;

}

///从大到小进行排序

for(i=0;i<5;i++)

for(j=i+1;j<5;j++)

if(temp[i]

{

t=temp[i];

temp[i]=temp[j];

temp[j]=t;

}

求出最大值

for(i=0;i<5;i++)

max=max*10+temp[i];

求出最小值

for(i=4;i>=0;i--)

min=min*10+temp[i];

求出差值,并且赋值给n,以便进行递归计算

n=max-min;

n的值与数组中的每个元素进行比较

for(i=0;i

if(n==m[i])如果有相等的则从i开始到数组结尾是数字黑洞

{

printf("[");

for(j=i;j

printf("%d,",m[j]);

printf("]\n");

return ;

}

m[flag++]=n;

fun();

}

void

main()

{

scanf("%d",&n);

m[0]=n;

flag++;

fun();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值