7-44 黑洞数(20 分)
黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。
任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数。)
例如,对三位数207:
- 第1次重排求差得:720 - 27 = 693;
- 第2次重排求差得:963 - 369 = 594;
- 第3次重排求差得:954 - 459 = 495;
以后会停留在495这一黑洞数。如果三位数的3个数字全相同,一次转换后即为0。
任意输入一个三位数,编程给出重排求差的过程。
输入格式:
输入在一行中给出一个三位数。
输出格式:
按照以下格式输出重排求差的过程:
序号: 数字重排后的最大数 - 重排后的最小数 = 差值
序号从1开始,直到495出现在等号右边为止。
输入样例:
123
输出样例:
1: 321 - 123 = 198 2: 981 - 189 = 792 3: 972 - 279 = 693 4: 963 - 369 = 594 5: 954 - 459 = 495
1 #include <stdio.h> 2 3 int number(int a[], int len, int flag); 4 int max(int a[], int len); 5 void dd(int a[], int n); 6 7 int main(int argc, char const *argv[]) 8 { 9 int n; 10 int a[3]; 11 12 scanf("%d", &n); 13 14 int len = sizeof(a)/sizeof(a[0]); 15 16 // 输入的数是495也要输出一次 17 for ( int i = 1; n != 495 || i == 1; i++ ) { 18 dd(a,n); 19 // 选择排序 20 for ( int i = len-1; i > 0; i-- ) { 21 int maxid = max(a,i+1); 22 // swap a[maxid], a[len-1] 23 int t = a[maxid]; 24 a[maxid] = a[i]; 25 a[i] = t; 26 } 27 // 1-->mim 0-->max 28 int min = number(a,sizeof(a)/sizeof(a[0]),1); 29 int max = number(a,sizeof(a)/sizeof(a[0]),0); 30 if ( min == max ) { // 三位数的3个数是否相同 31 printf("%d: %d - %d = %d\n", i, max, min, max-min); 32 break; 33 } else { 34 printf("%d: %d - %d = %d\n", i, max, min, max-min); 35 } 36 n = max - min; 37 } 38 39 return 0; 40 } 41 42 int number(int a[], int len, int flag) 43 { 44 int num = 0; 45 if ( flag ) { 46 for ( int i = 0; i < len; i++ ) { 47 num = num * 10 + a[i]; 48 } 49 } else { 50 for ( int i = len-1; i >= 0; i-- ) { 51 num = num * 10 + a[i]; 52 } 53 } 54 return num; 55 } 56 57 int max(int a[], int len) 58 { 59 int maxid = 0; 60 int i; 61 for ( i = 1; i < len; i++ ) { 62 if ( a[i] > a[maxid] ) { 63 maxid = i; 64 } 65 } 66 return maxid; 67 } 68 69 void dd(int a[], int n) 70 { 71 a[0] = n / 100; 72 a[1] = n / 10 % 10; 73 a[2] = n % 10; 74 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App