PTA刷题笔记(C语言) | 7-44 黑洞数 (20分)

开始刷题,感觉代码量和基础太渣了,导致数据结构不会,重头慢慢刷吧~
在这里插入图片描述


1、题目

在这里插入图片描述
输入样例:

123

输出样例:

1: 321 - 123 = 198
2: 981 - 189 = 792
3: 972 - 279 = 693
4: 963 - 369 = 594
5: 954 - 459 = 495


2、代码

#include<stdio.h>
int main(){
	int N,a=0,b=0,c=0;
	scanf("%d",&N);
	int max=-1,min=1000,cnt=1;
	int temp=N;
	int maxDigit, minDigit, midDigit;
	while(1){
		a=temp/100;
		b=temp/10%10;
		c=temp%100%10;
		if(a>=b && a>=c){
            maxDigit = a;
        }
        else if(b>=a && b>=c){
            maxDigit = b;
        }
        else{
            maxDigit = c;
        }

        if(a<=b && a<=c){
            minDigit = a;
        }
        else if(b<=a && b<=c){
            minDigit = b;
        }
        else{
            minDigit = c;
        }
        midDigit = a+b+c-maxDigit-minDigit;
        max = maxDigit*100+midDigit*10+minDigit;
        min = minDigit*100+midDigit*10+maxDigit;
		temp=max-min;
		printf("%d: %d - %d = %d
",cnt,max,min,temp);
		if(temp==0||temp==495) break;
		cnt++;
		max=-1,min=1000;
	}
	
	return 0;
} 

在这里插入图片描述

3、讨论

这个题很有意思的哈,本来以为就是个 “简单” 题,用循环来计算最大值最小值,果然超时了。。。

#include<stdio.h>
int main(){
	int N,a=0,b=0,c=0;
	scanf("%d",&N);
	int max=-1,min=1000,cnt=1;
	int temp=N;
	while(1){
		a=temp/100;
		b=temp/10%10;
		c=temp%100%10;
		int n[6]={0};
		n[1]=100*a+10*b+c;
		n[2]=100*a+10*c+b;
		n[3]=100*b+10*a+c;
		n[4]=100*b+10*c+a;
		n[5]=100*c+10*b+a;
		n[6]=100*c+10*a+b;
		int i;
		for(i=1;i<=6;i++){
			if(n[i]>max){
				max=n[i];
			}
		}
		for(i=1;i<=6;i++){
			if(n[i]<min){
				min=n[i];
			}
		}
		temp=max-min;
		printf("%d: %d - %d = %d
",cnt,max,min,temp);
		if(temp==0||temp==495) break;
		cnt++;
		max=-1,min=1000;
	}
	return 0;
} 

上网一搜,新的方法是分别取 a,b,c 的最大值和最小值进行组合,这样就不用循环了,很好用!

妙啊!!!
在这里插入图片描述
在这里插入图片描述

原文地址:https://www.cnblogs.com/hzcya1995/p/13302568.html