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;
  for(int i=0 ; i<4 ; ++i)
  {
    sum=sum*10+arr[i];
  }
  return sum;
}

void toArr()
{
  for(int i=0 ; i<4 ; ++i)    //拆解数字
  {
    arr[i]=n%10;
    n/=10;
  }
}
int main()
{

  scanf("%d",&n);
  int MIN,MAX;            //最小排列数,最大排列数

  while(1)
  {
    toArr();                //拆解
    sort(arr,arr+4,NonIncreasingOrder);    //生成最大数
    MAX=toNum();
    sort(arr,arr+4,NonDecreasingOrder);    //生成最小数
    MIN=toNum();
    n=MAX-MIN;
    printf("%04d - %04d = %04d\n",MAX,MIN,n);
    if(n==0 || n==AIM)        //n是4个相同数字(包括0000的情况,不用额外考虑),或者剪到最后了
      break;
  }
  return 0;
}
时间: 2024-10-11 22:50:04

PAT:1019. 数字黑洞 (20) AC(同甲级1069)的相关文章

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 ... ... 现给定

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 1019. 数字黑洞

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

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 ... .

1019. 数字黑洞 (20)

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

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 =

1019 数字黑洞 (20分)

#include <stdio.h> #include <vector> #include <algorithm> #include <string.h> #include <cmath> #include <stdlib.h> #include <iostream> using namespace std; int main() { int N,h,l,i,j; char num[5],num1[5]; char tmp

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