python求黑洞数_求解黑洞数

本文介绍了黑洞数的概念,通过举例展示了如何进行重排求差操作,并提供了使用C++编写的算法来寻找黑洞数,例如4位数的黑洞数6174。文章通过示例代码解释了求解过程,并指出当输入5时会陷入特定的循环圈。
摘要由CSDN通过智能技术生成

问题描写:

黑洞数又称圈套数,是类具有奇特转换特性的整数。任何1个数字不全相同的整数,

经有限“重排求差”操作,总会得到某1个或1些数,这些数即为黑洞数。

“重排求差”操作即把组成该数的数字重排后得到的最大数减去重排后得到的最小数。

举个例子,3位数的黑洞数为495.

简易推导进程:随意找个数,如297,3个位上的数从小到大和从大到小各排1次,

为972和279,相减得693。按上面做法再做1次,得到594,再做1次,得到495,

以后反复都得到495。

验证4位数的黑洞数为6174。解题思路:

ab7161fbc2bdc9ee55de09e1763730dc.png

#include

#include

#include

using namespace std;

#define LENTH 100

/* 降序:冒泡排序 */

void dec_sort(int array[],int n)

{

int flag = 0;

for(int i=0;i

{

for(int j=0;j

{

if(array[j] < array[j+1])

{

array[j] += array[j+1];//array[j] = array[j] + array[j+1]

array[j+1] = array[j] - array[j+1];

array[j] -= array[j+1];//array[j] = array[j] - array[j+1]

flag = 1;

}

}

if(flag == 0)//在1趟排序中若未产生交换,表明已排序好,退出程序

break;

}

}

/* 升序:选择排序 */

void inc_sort(int array[],int n)

{

int k;

for(int i=0;i

{

k = i;//假定要排序的1组数据中第1个数最小(k寄存待排序数据中最小值的下标)

for(int j=k+1;j

{

if(array[j] < array[k])//若存在比当前值还小的数,则交换下标

{

k = j;

}

}

if(k != i)

{

array[i] += array[k];

array[k] = array[i] - array[k];

array[i] -= array[k];

}

}

}

int black_hole_num(int n)

{

cout<

//注意:!!!求解进程中会改变n的值,而下面要用到n,不想它改变

//所以用临时变量保存他的值,改变临时变量,而不改变它

int temp = n;

int array[LENTH];

int i = 0;

int count;

int max = 0;

int min = 0;

/* 将该数值的各个位寄存在数组中 */

while(temp)

{

array[i] = temp%10;

i++;

temp /= 10;

}

count = i;

/* 元素升序以后,求解最小值*/

inc_sort(array,count);

for(i=0;i

{

min = min*10 + array[i];

}

/* 元素降序以后,求解最大值*/

dec_sort(array,count);

for(i=0;i

{

max = max*10 + array[i];

}

/*if(max - min == n)//此处要用到n的值,所以改变临时变量而不改变n

return n;

else

return black_hole_num(max - min);*/

return (max - min == n) ? n:black_hole_num(max - min);

}

int main()

{

int flag = 1;

int n;

int num;

system("mode con cols=100 lines=100");

system("color 0A");

while(flag)

{

cout<

cout<

cout<

cin>>n;

cout<

cin>>num;

cout<

cout<

cin>>flag;

}

return 0;

}

193fa14ff4d74b33dbf2ead5be065909.png

当输入5的时候,会堕入[82962,75933,63954,61974]循环圈中

fca08f20834be59ba85bc071015b6dd1.png

任何1个数字不全相同的整数,

经有限“重排求差”操作,总会得到某1个或1些数,这些数即为黑洞数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值