6174問題解決


有名な6147の質問は以下の通りです.
       ,         ,           ,        ,            ,      。  : 1234       4321-1234 =3087308712341234->3087->8352->6174

私の考え:(1)原数を書き出して新しい数を得る操作 up(),getB() ,getB
up関数は4つの混乱した数を並べ替えて問題の幹の中で3087のあのような操作getB関数を返してup関数を利用して1つの4桁を新しい4桁に変えました
(2)新たに出現した数が元の数と重複しているか否かを判断する操作を書き出しistrue関数で判断し,istrue関数には3つのパラメータnum,k,tempがある.
num             
k       num    
temp               
              1,      0

(3)主関数には何が書かれているのか⊙0⊙主関数はnumを初期化し、マクロ定義の初期数をnum[0]に付与する.統計が何回繰り返されるかを統計するカウント変数countを初期化しました
ソースを添付:
#include <iostream>
using namespace std;
#define X 1234 //  X     
#define N 10000 //             
int up(int a,int b,int c,int d){     //       
    int num[4]={a,b,c,d};
    int temp ;
    for(int i=0;i<4;i++){
        for(int j=i+1;j<4;j++){
            if(num[j]>num[i]){
                temp = num[j];
                num[j]= num[i];
                num[i]=temp;
            }
        }
    }
    temp=(1000*num[0]+100*num[1]+10*num[2]+num[3])-(1000*num[3]+100*num[2]+10*num

[1]+num[0]);
    return temp;
}

int getB(int num){
    int a,b,c,d;
    a=num%10;
    b=num%100/10;
    c=num%1000/100;
    d=num/1000;
    return up(a,b,c,d);
}
int istrue(int num[10000],int k,int temp){
    for(int i=0;i<temp;i++){
        if(num[i]==k)
            return 0;
    }
    return 1;
}
void main()
{
    int  num[N],t=0,count=1;     //count          
    num[t]=X;
    while(istrue(num,getB(num[t]),t+1)){        //      ,   
        count++;            //count        
        t++;
        num[t]=getB(num[t-1]);
    }
    num[count]=getB(num[t]);
    //cout<<count<<endl;
    for(int i=0;i<count;i++)
        cout<<num[i]<<"->";
    cout<<num[count]<<endl;
}

プログラムのスクリーンショット:
補足:上記のコードが分からないところがあれば、ご指導ください.