PAT-乙级-1019 数字黑洞

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。

例如,我们从6767开始,将得到

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...

现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

输入格式:

输入给出一个 ( 区间内的正整数 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 //c++
 2 #include<iostream>
 3 #define CONST 6174
 4 using namespace std;
 5
 6 void sort(int *a);
 7 int main(){
 8   int n;
 9   cin>>n;
10   int arr[4],tmpa,tmpb;
11   while(1){
12     arr[3]=n%10;
13     arr[2]=n/10%10;
14     arr[1]=n/100%10;
15     arr[0]=n/1000;
16     if(arr[0]==arr[1]&&arr[0]==arr[2]&&arr[0]==arr[3]){
17       cout<<n<<" - "<<n<<" = "<<"0000";
18       return 0;
19     }
20
21     sort(arr);
22     tmpa=arr[0]*1000+arr[1]*100+arr[2]*10+arr[3];
23     tmpb=arr[3]*1000+arr[2]*100+arr[1]*10+arr[0];
24     cout<<arr[0]<<arr[1]<<arr[2]<<arr[3];
25     cout<<" - ";
26     cout<<arr[3]<<arr[2]<<arr[1]<<arr[0];
27     cout<<" = ";
28     n=tmpa-tmpb;
29     cout<<n/1000<<n/100%10<<n/10%10<<n%10<<endl;
30     if(n==CONST)
31         return 0;
32   }
33 }
34 void sort(int *a){
35   int f;
36   for(int i=0;i<3;i++){
37     f=1;
38     for(int j=0;j<3-i;j++){
39       if(a[j]<a[j+1]){
40         int tmp=a[j];
41         a[j]=a[j+1];
42         a[j+1]=tmp;
43         f=0;
44       }
45     }
46     if(f)
47       break;
48   }
49 }

原文地址:https://www.cnblogs.com/tenjl-exv/p/9795427.html

时间: 2024-08-04 23:26:22

PAT-乙级-1019 数字黑洞的相关文章

PAT乙级 1019. 数字黑洞 (20)

1019. 数字黑洞 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 018

PAT Basic 1019 数字黑洞 (20 分)

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... .

PAT:1019. 数字黑洞 (20) AC(同甲级1069)

#include<stdio.h> #include<algorithm> using namespace std; const int AIM=6174; int n; int arr[4]; bool NonIncreasingOrder(int a,int b) { return a>b; } bool NonDecreasingOrder(int a,int b) { return a<b; } int toNum() //得到这个数字 { int sum=0;

PAT 1019. 数字黑洞

1019. 数字黑洞 (20) 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 0189 = 96219621 - 1269 = 83528532 - 2358 = 61747641 - 1467 = 6174

*1019. 数字黑洞

1 /* 2 * Main.c 3 * 1019. 数字黑洞 4 * Created on: 2014年8月31日 5 * Author: Boomkeeper 6 *******部分通过****** 7 */ 8 9 #include <stdio.h> 10 #include <stdlib.h> 11 12 /* 13 *排序整数的各个位数字 14 *src[4]:原数组 15 *dstDown[4]:降序排序结果 16 *dstUp[4]:升序排序结果 17 */ 18 v

PAT-乙级-1019. 数字黑洞 (20)

1019. 数字黑洞 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 10899810 - 018

1019 数字黑洞 (20 分)

题目链接:1019 数字黑洞 (20 分) 这道题目:没有太难的地方,但是因为基础不够牢固,很多操作花的时间较长,甚至有些参考网上的方法. 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int string_to_int(string str) 5 { 6 int num; 7 stringstream ss; 8 ss<<str; 9 ss>>num; 10 return num; 11 } 12 13 s

PAT乙级1019

1019 数字黑洞 (20分) 题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968 给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的 6174,这个神奇的数字也叫 Kaprekar 常数. 例如,我们从6767开始,

PAT 1019. 数字黑洞 (20)

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ... 现给定

1019. 数字黑洞 (20) (数学啊 ZJU_PAT)

题目链接:http://www.patest.cn/contests/pat-b-practise/1019 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞"之称的6174,这个神奇的数字也叫Kaprekar常数. 例如,我们从6767开始,将得到 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 =