7-44 黑洞数(20 分)

2019-12-15 05:18栏目:bob体育平台
TAG:

bob体育app,黑洞数也称得上陷阱数,又称“Kaprekar难题”,是风流罗曼蒂克类具备奇特转换天性的数。

其余三个各位数字不全相通的四个人数,经有限次“重排求差”操作,总会拿走495。最终所得的495即为二位黑洞数。所谓“重排求差”操作即整合该数的数字重排后的最大数减去重排后的眇小数。(6174为三个人黑洞数。)

例如说,对四位数207:

  • 第1次重排求差得:720 - 27 = 693;
  • 第2次重排求差得:963 - 369 = 594;
  • bob体育平台,第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 = %dn", i, max, min, max-min);
32             break;
33         } else {
34             printf("%d: %d - %d = %dn", 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 }

 

版权声明:本文由bob体育app发布于bob体育平台,转载请注明出处:7-44 黑洞数(20 分)