C語言 · 數字黑洞


算法提高 數字黑洞  
時間限制:1.0s   內存限制:256.0MB
    
問題描述
  任意一個四位數,只要它們各個位上的數字是不全相同的,就有這樣的規律:
  1)將組成該四位數的四個數字由大到小排列,形成由這四個數字構成的最大的四位數;
  2)將組成該四位數的四個數字由小到大排列,形成由這四個數字構成的最小的四位數(如果四個數中含有0,則得到的數不足四位);
  3)求兩個數的差,得到一個新的四位數(高位零保留)。
  重復以上過程,最后一定會得到的結果是6174。
  比如:4312 3087 8352 6174,經過三次變換,得到6174
輸入格式
  一個四位整數,輸入保證四位數字不全相同
輸出格式
  一個整數,表示這個數字經過多少次變換能得到6174
樣例輸入
4312
樣例輸出
3
 
目的明確,題意很清晰的。
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 int ans=0;
 5 void sheng(int a[]){
 6     for(int i=0;i<4-1;i++){
 7         for(int j=0;j<4-i-1;j++){
 8             if(a[j]>a[j+1]){
 9                 int t = a[j];
10                 a[j] = a[j+1];
11                 a[j+1] = t;
12             }
13         }
14     }
15 }
16 void jiang(int a[]){
17     for(int i=0;i<4-1;i++){
18         for(int j=0;j<4-i-1;j++){
19             if(a[j]<a[j+1]){
20                 int t = a[j];
21                 a[j] = a[j+1];
22                 a[j+1] = t;
23             }
24         }
25     }
26 }
27 int tomax(int num){
28     int a[4]={0};
29     a[0] = num/1000%10;//千位 
30     a[1] = num/100%10;//百位 
31     a[2] = num/10%10;//十位 
32     a[3] = num%10;//個位 
33     jiang(a) ;
34     return a[0]*1000+a[1]*100+a[2]*10+a[3];
35 }
36 int tomin(int num){
37     int a[4]={0};
38     a[0] = num/1000%10;//千位 
39     a[1] = num/100%10;//百位 
40     a[2] = num/10%10;//十位 
41     a[3] = num%10;//個位 
42     sheng(a) ;
43     return a[0]*1000+a[1]*100+a[2]*10+a[3];
44 }
45 void dfs(int num){
46     if(num==6174){
47         return;
48     }
49     num=tomax(num)-tomin(num);
50     ans++;
51     dfs(num);
52 }
53 int main(){
54     int num;
55     scanf("%d",&num);
56     dfs(num);
57     printf("%d",ans);
58     return 0;
59 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM