それぞれの数字が全く同じではない4桁の正の整数を指定します.もし私たちが4つの数字を非増加順に並べてから非減少順に並べて、1番目の数字で2番目の数字を減らすと、新しい数が繰り返されます.そうすれば、私たちはすぐにデジタルブラックホールと呼ばれている6174に止まります.


1019デジタルブラックホール(20分)
各桁の数字が全く同じではない4桁の正の整数を指定します.まず、4つの数字を非増分順に並べてから、非増分順に並べて、1番目の数字で2番目の数字を減らすと、新しい数字が得られます.このように繰り返して、私たちはすぐに「デジタルブラックホール」と呼ばれる6174に止まります.この不思議な数字もKaprekar定数と呼ばれています.(タイトルソースPAT、侵入削除)
たとえば、6767から始めます.
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 … …
任意の4ビットの正の整数を指定し、ブラックホールに到達するプロセスを示すプログラムを作成します.入力フォーマット:入力は、(0,10 4)区間内の正の整数Nを与える.出力形式:Nの4桁の数字が全部等しい場合、1行にN-N=0000を出力する.そうでなければ、計算された各ステップは、6174が差として現れるまで1行に出力され、出力フォーマットは例を参照する.注意各数字は4桁で出力されます.
入力サンプル1 6767出力サンプル1:7766-6677=1089 9810-0189=9621 9621-1269=8352 8532-2358=6174
入力サンプル2:2222出力サンプル2:2222-2222=0000
-私の考えと解決策-
構想
表示
出力形式は4ビットで、4ビット未満の場合は前に0で補う
printf("%0md",n); nをmビットに出力し、mビットが足りない場合は0で前に補う
4桁の数で構成される最大数から構成される最小数を減算するには
1.数の4ビット分離を配列に格納して並べ替え、配列内の数値を最大と最小の数にする
#include
using namespace std;
#include
int cmp(int a,int b)    //  c++  sort  
{
     
    return a>b;       //      
}
int main()
{
     
    int i,n;
    int a=0,b=0,c;
    int s[4];
    scanf("%d",&n);
    c=n;
    while(1)
        {
        a=b=0;
        	for(i=0;i<4;i++)
    		{
     
       			s[i]=c%10;   //             s[] 
        		c/=10;
    		}
    		sort(s,s+4,cmp);  //         
            for(i=0;i<4;i++)
            {
     
                a=a*10+s[i];   //a    
            }
            for(i=3;i>=0;i--)
            {
     
                b=b*10+s[i]; //b    
            }
            c=a-b;
			if(a==b)     //              ,       
        		{
     
					printf("%04d - %04d = %04d
"
,a,b,c); break; } else printf("%04d - %04d = %04d
"
,a,b,c); // , 0 ; if(c==6174) break; // 6147 } return 0; }