- 保送
HELP!!!
- 2024-4-2 19:59:27 @
给定⼀个三位数,要求各位不能相同。例如,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
输出数据 1
4
压根不会
3 comments
-
rc244wangjiayou1 LV 10 @ 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