给定⼀个三位数,要求各位不能相同。例如,352 是符合要求的,112 是不符合 要求的。将这个三位数的三个数字重新排列,得到的最⼤的数,减去得到的最⼩ 的数,形成⼀个新的三位数。对这个新的三位数可以重复上述过程。神奇的是, 最终⼀定会得到 495! 试试看,重新排列 352,得到的最⼤数为 532,最⼩数为 235,它们的差是 297; 变换 297,得到 972-279=693;变换 693,963-369=594;变换 594,954-459=495。 因此,352 经过 4 次变换得到了 495。 现在,输⼊的三位数,你能通过编程得出,这个三位数经过多少次变换能够得到 495 吗?

输入描述

输⼊⼀⾏,包含⼀个符合要求的三位数 N 。

输出描述

输出⼀⾏,包含⼀个整数C ,表⽰经过 C次变换得到 495 。

样例

输入数据 1

352

Copy

输出数据 1

4
压根不会                                                             

3 条评论

  • @ 2024-10-1 9:50:27
    #include<bits/stdc++.h>
    using namespace std;
    int max(int x,int y,int z){
      return max(x,max(y,z));
    }
    int min(int x,int y,int z){
      return min(x,min(y,z));
    }
    int mid(int x,int y,int z){
      if(x<y)swap(x,y);
      if(y<z)swap(y,z);
      if(x<y)swap(x,y);
      return y;
    }
    int f1(int a,int b,int c){
      return 100*max(a,b,c)+10*mid(a,b,c)+min(a,b,c);
    }
    int f2(int a,int b,int c){
      return 100*min(a,b,c)+mid(a,b,c)+max(a,b,c);
    }
    int main(){
    	int num,cnt=0,a,b,c,ax,in;
    	cin>>sun;
    	while(num!=495){
    		c=num%10;
    		b=num/10%10;
    		a=num/100;
            ax=f1(a,b,c);
            in=f2(a,b,c);
    		num=ax-in;
    		cnt++;
    	}
    	cout<<cnt;
    	return 0;
    }
    
    
    • @ 2024-6-23 8:33:05

      谢谢大佬!

      • @ 2024-4-5 8:19:18
        #include<bits/stdc++.h>
        int maxof3(int a, int b, int c){
        	int t;
        	if (a < b){
        		t = a;
        		a = b;
        		b = t;
        	}
        	if (a < c){
        		t = a;
        		a = c;
        		c = t;
        	}
        	if (b < c){
        		t = b;
        		b = c;
        		c = t;
        	}
        	return (a * 100 + b * 10 + c);
        }
        int minof3(int a, int b, int c){
        	int t;
        	if (a < b){
        		t = a;
        		a = b;
        		b = t;
        	}
        	if (a < c){
        		t = a;
        		a = c;
        		c = t;
        	}
        	if (b < c){
        		t = b;
        		b = c;
        		c = t;
        	}
        	return (100 * c + 10 * b + a);
        }
        int main(){
        	int num, cnt = 0;
        	int a1, b1, c1;
        	int max, min;
        	scanf("%d", &num);
        	while (num != 495){
        		c1 = num % 10;
        		b1 = num / 10 % 10;
        		a1 = num / 100;
        		max = maxof3(a1, b1, c1);
        		min = minof3(a1, b1, c1);
        		num = max - min;
        		cnt++;
        	}
        	printf("%d", cnt);
        	return 0;
        }
        
        • 1