黑洞数
编程求三位数中的“黑洞数”。
黑洞数又称陷阱数,任何一个数字不全相同的整数,经有限次“重排求差”操作,总会得到某一个或一些数,这些数即为黑洞数。“重排求差”操作是将组成一个数的各位数字重排得到的最大数减去最小数,例如207,“重排求差”操作序列是720-027=693,963-369=594,954-459=495,再做下去就不变了,再用208算一次,也停止到495,所以495是三位黑洞数。
我们可以写一个函数求出三位数的百位、十位、个位,并将其比较大小在返回相减值,用循环反复进行相减,通过条件判断求出黑洞数。
#include<iostream>
using namespace std;
int fun(int i)
{
int a,b,c,max,min,mid,m;
a=i/100;
b=i/10%10;
c=i%10;
if(a!=b||b!=c||c!=a)
{
if(a>=b&&a>=c)
{
max=a;
if(b>=c)
{
mid=b;
min=c;
}else
{
mid=c;
min=b;
}
}else if(b>=a&&b>=c)
{
max=b;
if(a>=c)
{
mid=a;
min=c;
}else
{
mid=c;
min=a;
}
}else if(c>=a&&c>=b)
{
max=c;
if(a>=b)
{
mid=a;
min=b;
}else
{
mid=b;
min=a;
}
}
}
m=(max*100+mid*10+min)-(min*100+mid*10+max);
return m;
}
int main()
{
int a,b,c,max,min,mid,m,i;
cout<<"请输入一个三位整数:"<<endl;
cin>>i;
for(int k=0;;)
{
int p=fun(i);
if(i==p)
{
m=i;
break;
}
i=fun(i);
}
cout<<m<<endl;
return 0;
}
运行结果如下: