zoukankan      html  css  js  c++  java
  • PAT1069:The Black Hole of Numbers

    1069. The Black Hole of Numbers (20)

    时间限制
    100 ms
    内存限制
    65536 kB
    代码长度限制
    16000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in this manner we will soon end up at the number 6174 -- the "black hole" of 4-digit numbers. This number is named Kaprekar Constant.

    For example, start from 6767, we'll get:

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

    Given any 4-digit number, you are supposed to illustrate the way it gets into the black hole.

    Input Specification:

    Each input file contains one test case which gives a positive integer N in the range (0, 10000).

    Output Specification:

    If all the 4 digits of N are the same, print in one line the equation "N - N = 0000". Else print each step of calculation in a line until 6174 comes out as the difference. All the numbers must be printed as 4-digit numbers.

    Sample Input 1:
    6767
    
    Sample Output 1:
    7766 - 6677 = 1089
    9810 - 0189 = 9621
    9621 - 1269 = 8352
    8532 - 2358 = 6174
    
    Sample Input 2:
    2222
    
    Sample Output 2:
    2222 - 2222 = 0000

    思路

    逻辑数学题
    注意6174本身的判断和1111系列数字的判断,另外对于小于4位的数字也要进行插'0'处理。

    代码
    #include<iostream>
    #include<algorithm>
    #include<sstream>
    using namespace std;
    
    
    bool cmp(const char a,const char b)
    {
        return a > b;
    }
    
    bool isEquation(string s1)
    {
       int a = stoi(s1);
       if( a == 0 || a % 1111 == 0)
        return true;
    
       return false;
    }
    
    int main()
    {
        string s;
        while(cin >> s)
        {
           if(isEquation(s))
           {
               cout << s << " - " << s << " = 0000" << endl;
               break;
           }
           if(s == "6174")
           {
               cout << "7641 - 1467 = 6174" << endl;
               break;
           }
           int num1 = 0,num2 = 0;
           while( num1 != 6174)
           {
               while(s.size() < 4)
                 s.push_back('0');
               sort(s.begin(),s.end(),cmp);
               num1 = stoi(s);
               sort(s.begin(),s.end());
               num2 = stoi(s);
               printf("%04d - %04d = %04d
    ",num1,num2,num1 - num2);
               num1 -= num2;
               s = to_string(num1);
           }
        }
    }
  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/0kk470/p/7867619.html
Copyright © 2011-2022 走看看