方法一:冒泡排序法
先介绍以下冒泡排序
//冒泡排序(从小到大)
#include<stdio.h>
int main()
{
int arr[10]={1,3,6,5,2,4,8,9,7,0};
for(int i=0;i<9;i++){//i小于数组的长度减一,因为最大的数字最后不用比较了
for(int j=0;j<10-1-i;j++){
if(arr[j]>arr[j+1]){
int t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
}
}
//输出结果
for(int i=0;i<10;i++){
printf("%d\t",arr[i]);
}
return 0;
}
顺便介绍选择排序
//选择排序 (从小到大)
#include<stdio.h>
int main()
{
int arr[10]={1,3,6,5,2,4,8,9,7,0};
for(int i=0;i<9;i++){
for(int j=i+1;j<10;j++){
if(arr[i]>arr[j]){
int t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
//输出结果
for(int i=0;i<10;i++){
printf("%d\t",arr[i]);
}
return 0;
}
因此这题可以这样写
#include<stdio.h>
int H(int n)
{
int a[3],t=0,b=0,c=0;
a[0]=n/100;
a[1]=n%100/10;
a[2]=n%10;
for(int i=0;i<2;i++){
for(int j=0;j<2-i;j++){
if(a[j]>a[j+1]){
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
b=a[2]*100+a[1]*10+a[0];
c=a[0]*100+a[1]*10+a[2];
printf("%d - %d= %d\n",b,c,b-c);
return b-c;
}
int main()
{
int n=0,t=0;
scanf("%d",&n);
while(n!=495||t==0){
printf("%d: ",++t);
n=H(n);
}
return 0;
}
方法二:直接计算,利用三位数排序的方法
#include<stdio.h>
int main()
{
int n,a,b,c,t;
int max,min;
int count=0;
scanf("%d",&n);
while(n!=495||count==0){//当输入495时,也会进行一次循环
a=n/100;
b=n%100/10;
c=n%10;
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;
}
max=c*100+b*10+a;
min=a*100+b*10+c;
n=max-min;
printf("%d: %d - %d = %d\n",++count,max,min,n);
}
return 0;
}