1.27日的学习小成果
一.数字黑洞问题
题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968
题目如下:图片说明
图片说明
1)不足四位数要在前面补零的书写办法:

printf("%04d - %04d = %04d\n",max,min,n);

表明该数字一定占四个空位,若不足四位数则在数字前面补0
(代替了原来笨笨的枚举法)情况太多了,以后用上面方法

eg:    if(n==0){
            printf("%d - %d = 000%d\n",max,min,n);
    }else{
        if(min<10){
            if(n<1000){
                printf("%d - 000%d = 0%d\n",max,min,n);
            }else {
                printf("%d - 000%d = %d\n",max,min,n);
            }
        }else if(min<100){
            if(n<1000){
                printf("%d - 00%d = 0%d\n",max,min,n);
            }else {
                printf("%d - 00%d = %d\n",max,min,n);
            }
        }else if(min<1000){
            if(n<1000){
                printf("%d - 0%d = 0%d\n",max,min,n);
            }else {
                printf("%d - 0%d = %d\n",max,min,n);
            }
        }else {
            if(n<1000){
                printf("%d - %d = 0%d\n",max,min,n);
            }else {
                printf("%d - %d = %d\n",max,min,n);
            }
        }
    }

该题while()里不能写n!=6174&&n!=0如果这样写,当输入数字为6174时,就不会输出任何东西
不符合题意。
正确的做法应该时while()里面写 1 即可,在循环体里面再判断是否为6174或者0,这样才能保证,每次输入都会进入循环,至少会输出一个东西。
错误代码如下:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; 

int main()
{
    int n,sum,i,j,k,max,min;
    int a[4];
    cin>>n;
    while(n!=6174&&n!=0){
        for(i=0;i<4;i++){
        a[i]=n%10;
        n/=10;
    }
    sort(a,a+4);
    max=a[3]*1000+a[2]*100+a[1]*10+a[0];
    min=a[0]*1000+a[1]*100+a[2]*10+a[3];
    n=max-min;
    printf("%04d - %04d = %04d\n",max,min,n);
    }
    return 0;
 } 

输出结果如下:图片说明
正确代码如下:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std; 

int main()
{
    int n,sum,i,j,k,max,min;
    int a[4];
    cin>>n;
    while(1){
        for(i=0;i<4;i++){
        a[i]=n%10;
        n/=10;
    }
    sort(a,a+4);
    max=a[3]*1000+a[2]*100+a[1]*10+a[0];
    min=a[0]*1000+a[1]*100+a[2]*10+a[3];
    n=max-min;
    printf("%04d - %04d = %04d\n",max,min,n);
    if(n==0||n==6174){
        break;
    }
    }
    return 0;
 } 

输出结果如下:
图片说明