1019. 数字黑洞 (20)
2017-05-28 22:37
253 查看
1019. 数字黑洞 (20)
PAT地址:https://www.patest.cn/contests/pat-b-practise/1019给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
例如,我们从6767开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
现给定任意4位正整数,请编写程序演示到达黑洞的过程。
输入格式:
输入给出一个(0, 10000)区间内的正整数N。
输出格式:
如果N的4位数字全相等,则在一行内输出“N - N = 0000”;否则将计算的每一步在一行内输出,直到6174作为差出现,输出格式见样例。注意每个数字按4位数格式输出。
输入样例1:
6767
输出样例1:
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174
输入样例2:
2222
输出样例2:
2222 - 2222 = 0000
心得:
(1)、main()的a[4]一定要初始化,不然n=1000,2000...时会出错。
(2)C++ using namespace std;下有sort(),不需要自己写。
(3)printf("%04d",n):输出四位,n 不足四位,用0补足四位。
一:自己写的代码
C Code:
#include <stdio.h> void BubbleSort(int a[],int n); void blackhole(int n); int main() { int n; scanf("%d",&n); blackhole(n); return 0; } void blackhole(int n) { int a[4]={0};//一定要初始化,不然n=1000会出错。 int i; int max, min; for(i = 0; n > 0; i++){ a[i] = n % 10; n /= 10; } BubbleSort(a,4); max = a[0] * 1000 + a[1] * 100 + a[2] * 10 +a[3]; min = a[3] * 1000 + a[2] * 100 + a[1] * 10 +a[0]; n = max - min; printf("%04d - %04d = %04d\n",max,min,n); if(n != 6174 && n != 0) blackhole(n); else if(n == 6174 || n == 0)//n=0||6174,递归退出。 return; }//黑洞递归。 void BubbleSort(int a[],int n) { int i, j, t; for(i = 0; i < n-1; i++) for(j = 0; j < n - i - 1;j++) if(a[j] < a[j+1]){ t = a[j]; a[j] = a[j+1]; a[j+1] = t; } }//对数组进行冒泡排序,由大到小。 //这里可以选择简单选择排序
二、别人写的
C++ Code:
#include <stdio.h> #include <algorithm> using namespace std; int inc, de; void gao(int x){ int a[4]; a[0] = x / 1000; a[1] = x / 100 % 10; a[2] = x / 10 % 10; a[3] = x % 10; sort(a, a + 4); inc = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3]; de = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0]; } int main(){ int n, s; scanf("%d", &n); if ((n / 1000 == n / 100 % 10) && (n / 1000 == n / 10 % 10) && (n / 1000 == n % 10)){ printf("%04d - %04d = 0000\n", n, n); return 0; } do{ gao(n); s = de - inc; printf("%04d - %04d = %04d\n", de, inc, s); n = s; } while (s != 6174); return 0; }
相关文章推荐
- 1019. 数字黑洞 (20)-PAT乙级真题
- PAT乙级 1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)
- PAT 乙级 1019. 数字黑洞 (20)
- PAT(乙级)1009 1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)
- 【再思考】PATBAsic——1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)
- PAT乙级—1019. 数字黑洞 (20)-native
- 1019. 数字黑洞 (20) PAT乙级真题
- 1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)
- PAT(basic level) 1019 数字黑洞(20)
- 1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)
- 1019. 数字黑洞 (20)-PAT乙级A1069
- 1019. 数字黑洞 (20) 一直不能通过