黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数,任何一个子位数李不全相同的三位数,经有限次“重排求差”操作,总会得到45,最后所得的5部为三位需再数所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。例如,对三位数207
6- 第1次重排求差得:720-27=693;第2次重排求差得:963-369=594;第3次重排求差得:
954-459 =495;编写程序,实现如下功能:输入一个三位整数,输出将其转换为黑洞数的过程,
输入输出格式为:
输入: 207
输出: 1:720-27=693
2:963-369=594
3:954-459=495
如果输入的三位数字全部相同,则只输出一次重排求差过程,值为0就停止。
#include <stdio.h>
#include <string.h>
int max(int a,int b,int c) {
return a>b?(a>c?a:c):(b>c?b:c);
}
int mid(int a,int b,int c) {
return a>b?(a<c?a:((c>b)?c:b)):(b<c?b:((a>c)?a:c)) ;
}
int min(int a,int b,int c) {
return a<b?(a<c?a:c):(b<c?b:c);
}
int summax(int fir,int se,int th) {
return max(fir,se,th)*100+mid(fir,se,th)*10+min(fir,se,th);
}
int summin(int fir,int se,int th) {
return max(fir,se,th)*1+mid(fir,se,th)*10+min(fir,se,th)*100;
}
int main( ) {
int th,se,fir,t,n,i=10;
scanf("%d",&n);
t=n;
while(t!=495&&t!=0) {
fir=t%10;
se=t/10%10;
th=t/100%10;
t=summax(fir,se, th)-summin(fir,se,th);
printf("%d-%d=%d\n",summax(fir,se, th),summin(fir,se,th),t);
}
return 0;
}