• 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 的最大值和最小值进行组合,这样就不用循环了,很好用!

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

  • 相关阅读:
    RegularExpression 2
    Python __str__() and __repr()__
    RegularExpression 1
    python new kill callback
    Generic Programming v1
    spring的@Transactional注解详细用法
    cmd批量打开网页和关闭网页的批处理代码
    windows批处理中实现延时的办法
    单元测试
    Protocol (网络数据交换规则)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13302568.html
Copyright © 2020-2023  润新知