一问题描述

求三位数中的黑洞数,三位数排列作差最后的差不变,那么差就是黑洞数。

二设计思路

分别求去各个位上的数,然后将其中最大和最小数作差同时和上次的查比较想同就是黑洞数。

三程序流程图

 

 

四伪代码实现

#include<iostream>
using namespace std;
int max(int a,int b,int c){
int temp;
if(a<b){
temp=a;
a=b;
b=temp;
}
if(a<c){
temp=a;
a=c;
c=temp;
}
if(b<c){
temp=b;
b=c;
c=temp;
}
return (100*a+10*b+c);
}
int min(int a,int b,int c){
int temp;
if(a>b){
temp=a;
a=b;
b=temp;
}
if(a>c){
temp=a;
a=c;
c=a;
}
if(b>c){
temp=b;
b=c;
c=temp;
}
return (100*a+10*b+c);
}
int main(){
int x,a=3,b=2,c=1,h,y,i=0;
cin>>x;
while(i!=EOF){
a=x/100;b=x/10-a*10;c=x%10;
h=max(a,b,c)-min(a,b,c);
i++;
if(h==x)
{
cout<<h<<endl;
break;
}
x=h;
}
}

2

#include<iostream>
using namespace std;
int main(){
int x,a,b,c,h,max,min,i=0;
cin>>x;
while(i!=EOF){
//x=h;
a=x/100;b=x/10-a*10;c=x%10;
cout<<a<<" "<<b<<" "<<c<<endl;
if(a>b&&a>c&&b>c){
max=a*100+b*10+c;
min=c*100+b*10+a;
}
if(b>c&&b>a&&a>c){
max=b*100+a*10+c;
min=c*100+a*10+b;
}
if(c>a&&c>b&&a>b){
max=c*100+a*10+b;
min=b*100+a*10+c;
}
if(a>b&&a>c&&b<c){
max=a*100+c*10+b;
min=b*100+c*10+a;
}
if(b>c&&b>a&&a<c){
max=b*100+c*10+a;
min=a*100+c*10+b;
}
if(c>a&&c>b&&a<b){
max=c*100+b*10+a;
min=a*100+b*10+c;
}
h=max-min;
i++;
if(h==x)
{
cout<<h<<endl;
break;
}
x=h;
}
}

五代码实现