zoukankan      html  css  js  c++  java
  • 数字黑洞

    链接:http://www.nowcoder.com/pat/6/problem/4045

    题目描述

    给定任一个各位数字不完全相同的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位数格

    式输出。

    输入例子:

    6767

    输出例子:

    7766 - 6677 = 1089

    9810 - 0189 = 9621

    9621 - 1269 = 8352

    8532 - 2358 = 6174

     1 #include "iostream"
     2 #include <iomanip>
     3 #include <string.h>
     4 #include <string>
     5 #include <vector>
     6 #include <cmath>
     7 #include <cctype>
     8 #include <algorithm>
     9 using namespace std;
    10 
    11 int num[4];
    12 bool cmp1(int a, int b)    {return a > b;}
    13 bool cmp2(int a, int b)    {return a < b;}
    14 void fenlie(int a)
    15 {
    16     for(int i=0; i<4; ++i)
    17     {
    18         num[i] = a%10;
    19         a /= 10;
    20     }
    21 }
    22 int hebing()
    23 {
    24     int a = 0;
    25     for(int i=0; i<4; ++i)
    26     {
    27         a = a*10+num[i];
    28     }
    29     return a;
    30 }
    31 void solve(int a)
    32 {
    33     fenlie(a);
    34     sort(num, num+4, cmp1);
    35     for(int i=0; i<4; ++i)    {cout <<num[i];}
    36     cout <<" - ";
    37     int t1 = hebing();
    38     sort(num, num+4, cmp2);
    39     for(int i=0; i<4; ++i)    {cout <<num[i];}
    40     cout <<" = ";
    41     int t2 = hebing();
    42     a = t1-t2;
    43     fenlie(a);
    44     for(int i=3; i>=0; --i)    {cout <<num[i];}
    45     cout <<endl; 
    46     while(a != 6174)
    47     {
    48         fenlie(a);
    49         sort(num, num+4, cmp1);
    50         for(int i=0; i<4; ++i)    {cout <<num[i];}
    51         cout <<" - ";
    52         t1 = hebing();
    53         sort(num, num+4, cmp2);
    54         for(int i=0; i<4; ++i)    {cout <<num[i];}
    55         cout <<" = ";
    56         t2 = hebing();
    57         a = t1-t2;
    58         fenlie(a);
    59         for(int i=3; i>=0; --i)    {cout <<num[i];}
    60         cout <<endl;
    61     }
    62 }
    63 int main()
    64 {
    65     int a;
    66     cin >>a;
    67     fenlie(a);
    68     int e = 0;
    69     for(int i=1; i<4; ++i)
    70     {
    71         if(num[i] == num[i-1]){    ++e;}
    72     }
    73     if(e == 3)
    74     {
    75         cout <<a <<" - " <<a <<" = " <<"0000" <<endl;
    76     }
    77     else
    78     {
    79         solve(a);
    80     }
    81     return 0;
    82 }

    当输入20时,结果:

    当输入3333时,结果:

  • 相关阅读:
    高并发编程之基础概念
    使用JAXB实现Bean与Xml相互转换
    python语法(五)—函数
    2018年终总结
    python语法(四)— 文件操作
    excel开发
    spring 常用注解,@primary注解
    spring中InitializingBean和@Bean的初始化,bean初始化
    @PostConstruct 注解
    LocalDateTime java8
  • 原文地址:https://www.cnblogs.com/mtc-dyc/p/4620240.html
Copyright © 2011-2022 走看看