黑洞数(C语言)

黑洞数也称为陷阱数,又称"Kaprekar问题",是一类具有奇特转换特性的数。

任何一个各位数字不全相同的三位数,经有限次"重排求差"操作,总会得到495。最后所得的495即为三位黑洞数。所谓"重排求差"操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。)

例如,对三位数207:

第1次重排求差得:720 - 27 = 693;

第2次重排求差得:963 - 369 = 594;

第3次重排求差得:954 - 459 = 495;

以后会停留在495这一黑洞数。如果三位数的3个数字全相同,一次转换后即为0。

任意输入一个三位数,编程给出重排求差的过程。

#include <stdio.h>

int test(char arr[] )

{

int i = 0;

int j = 0;

int num1 = 0;

int num2 = 0;

char temp = '\0';
for( i = 0 ; i < 2 ; i++) 对字符数组排序
{
for( j = 0 ; j < 3 - i - 1 ;j++)
{
if( arr[j] > arr[j+1] )
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}

num1 = arr[0]-'0' + ( arr[1] -'0' ) * 10 + ( arr[2] - '0' ) *100 ;

num2 = arr[2]-'0' + ( arr[1] - '0' ) * 10 + ( arr[0] - '0' ) *100 ;

printf("%d - %d = %d\n",num1,num2,num1-num2);

arr[0] = (char)((num1-num2)/100)+'0' ; 对 num1 - num2 处理成新的数组

arr[1] = (char)(((num1-num2)/10)%10)+'0';

arr[2] = (char)((num1-num2)%10)+'0';

return num1-num2;

}

int main()

{

char arr[4] = { '\0'};

scanf("%s",arr); 接收三位数

while( 1 )

{

if( test(arr) == 495 )

{

return 0;

}

}

return 0;

}

相关推荐
CoovallyAIHub15 分钟前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
NineData1 小时前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库
木心月转码ing2 小时前
Hot100-Day14-T33搜索旋转排序数组
算法
会员源码网5 小时前
内存泄漏(如未关闭流、缓存无限增长)
算法
颜酱6 小时前
从0到1实现LFU缓存:思路拆解+代码落地
javascript·后端·算法
颜酱7 小时前
从0到1实现LRU缓存:思路拆解+代码落地
javascript·后端·算法
CoovallyAIHub1 天前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github