1. 程式人生 > 其它 >PATA1069 數字黑洞

PATA1069 數字黑洞

技術標籤:演算法筆記c++

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.

  1. 頻繁使用的轉換可封裝成函式
  2. 輸出格式非常重要
#include <stdio.h>
#include <algorithm>
#include <math.h> using namespace std; void num_to_array(int n,int a[]){ for(int i=0;i<4;i++){ a[i]=n%10; n/=10; } } int array_to_num(int a[]){ int n=0; for(int i=0;i<4;i++){ n=n*10+a[i]; } return n; } bool cmp(int a,int b)
{ return a>b; } int main(){ int n,a[4]; scanf("%d",&n); num_to_array(n,a); do{ int n1,n2; sort(a,a+4); n1=array_to_num(a); sort(a,a+4,cmp); n2=array_to_num(a); n=n2-n1; printf("%04d - %04d = %04d\n",n2,n1,n); /*%d左對齊,輸出變數的所有數字; %4d右對齊,寬度為4,左邊填充空格,當變數的實際寬度大於4時,輸出變數的所有數字; %04d與%4d的唯一區別就是左邊填充0。*/ num_to_array(n,a); }while(n!=6174&&n!=0); return 0; }

在這裡插入圖片描述