C语言 黑洞陷阱

目标:

程序输入的一个小于1000且三个数字不全相等的整数,请你输出进入黑洞的重排求差过程。495是一个很神奇的数,被称为黑洞数或者陷阱数。

提示: 

给定任何一个小于1000的正整数,经前位补0后可以得到一个三位数(两位数前面补1个0,一位数前面补2个0)。如果这个三位数的三个数字不全相等,那么经有限次“重排求差”操作(组成该数的数字重排后的最大数减去重排后的最小数),总会得到495。

例如,对整数80,前位补0后得到080,重排后可以得到800,008。此时可以得到的最大数为800,最小数为008(即8)。那么只需要4次重排求差即可得到495,过程如下:

1:800-8=792 //第一次

2:972-279=693 //第二次,将第一次的结果进行重排求差

3:963-369=594 //第三次,将第二次的结果进行重排求差

4:954-459=495 //第四次以此类推

程序实现:

详细输出:

#include <stdio.h>
int main()
{
    int n;
    printf("请输入一个三位数:\n");
    scanf("%d",&n);
    int a[3],b[6];
    int s=1,max,min;
    do{
    	a[0]=n%10;n=n/10;
        a[1]=n%10;n=n/10;
        a[2]=n;
    
        b[0]=a[0]+a[1]*10+a[2]*100;
        b[1]=a[0]+a[2]*10+a[1]*100;
        b[2]=a[1]+a[0]*10+a[2]*100;
        b[3]=a[1]+a[2]*10+a[0]*100;
        b[4]=a[2]+a[0]*10+a[1]*100;
        b[5]=a[2]+a[1]*10+a[0]*100;
        
        printf("第%d次 可以排成如下几种形式:\n",s);
        s++;
        for(int i=0;i<6;i++)     //输出排好的数字 
        {
        	printf("%03d\n",b[i]);
		}

        max=b[0];
        min=b[0];
        for(int i=0;i<6;++i) //最大值 
		{
            if(b[i] > max)   
			{ 
                max=b[i];
            }
        }
        
        for(int i=0;i<6;++i)  //最小值 
		{
            if(b[i] < min)   
			{ 
                min=b[i];
            }
        }
        n=max-min;    //差值 
        printf("max=%d\n",max);
        printf("min=%d\n",min);
        printf("%d-%d=%d\n\n",max,min,max-min);
    }while(n!=495);
    return 0;
}
请输入一个三位数:
8
第1次 可以排成如下几种形式:
008
008
080
800
080
800
max=800
min=8
800-8=792

第2次 可以排成如下几种形式:
792
972
729
279
927
297
max=972
min=279
972-279=693

第3次 可以排成如下几种形式:
693
963
639
369
936
396
max=963
min=369
963-369=594

第4次 可以排成如下几种形式:
594
954
549
459
945
495
max=954
min=459
954-459=495

简介输出:

#include <stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int a[3],b[6];
    int s=1,max,min;
    do{
    	a[0]=n%10;n=n/10;
        a[1]=n%10;n=n/10;
        a[2]=n;
    
        b[0]=a[0]+a[1]*10+a[2]*100;
        b[1]=a[0]+a[2]*10+a[1]*100;
        b[2]=a[1]+a[0]*10+a[2]*100;
        b[3]=a[1]+a[2]*10+a[0]*100;
        b[4]=a[2]+a[0]*10+a[1]*100;
        b[5]=a[2]+a[1]*10+a[0]*100;
        
        max=b[0];
        min=b[0];
        for(int i=0;i<6;++i) //最大值 
		{
            if(b[i] > max)   
			{ 
                max=b[i];
            }
        }
        
        for(int i=0;i<6;++i)  //最小值 
		{
            if(b[i] < min)   
			{ 
                min=b[i];
            }
        }
        n=max-min;    //差值 
        printf("%d:%d-%d=%d\n",s,max,min,max-min);
        s++;
    }while(n!=495);
    return 0;
}
输入:123 
输出: 
1:321-123=198 
2:981-189=792 
3:972-279=693 
4:963-369=594 
5:954-459=495

输入:18 
输出: 
1:810-18=792 
2:972-279=693 
3:963-369=594 
4:954-459=495

猜你喜欢

转载自blog.csdn.net/m0_66411584/article/details/127569289