欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1019 数字黑洞 (20分)

程序员文章站 2022-03-13 13:37:23
...

1019 数字黑洞 (20分)

#include<stdio.h>
#include<algorithm>
using namespace std;
int num[4],num1[4],num2[4];
void getnum(int a){
    for(int i=0;i<4;i++){
        num[i]=a%10;
        a=a/10;
    }
}
bool cmp(int a,int b){
    return a>b;
}
int main(){
    int a,b1=0,b2=0,b=0;
    scanf("%d",&a);
    int ans=0;
    getnum(a);
    for(int i=1;i<4;i++){
        if(num[i]==num[i-1])ans++;
    }
    if(ans==3)printf("%d - %d = 0000\n",a,a);
    else{
        while(b!=6174){
            sort(num,num+4,cmp);
            for(int i=0;i<4;i++){
                num1[i]=num[i];
            }
            b1=num1[0]*1000+num1[1]*100+num1[2]*10+num1[3];
            sort(num,num+4);
            for(int i=0;i<4;i++){
                num2[i]=num[i];
            }
            b2=num2[0]*1000+num2[1]*100+num2[2]*10+num2[3];
            b=b1-b2;
            getnum(b);
            printf("%04d - %04d = %04d\n",b1,b2,b);
        }
    }
}

第一次,独立完成,25min

#include<stdio.h>
#include<algorithm>
using namespace std;
int num[4];
void to_arrayy(int a){
    for(int i=0;i<4;i++){
        num[i]=a%10;
        a=a/10;
    }
}
int to_number(int num[]){
    int sum=0;
    for(int i=0;i<4;i++){
        sum=sum*10+num[i];
    }
    return sum;
}
bool cmp(int a,int b){
    return a>b;
}
int main(){
    int a,b1=0,b2=0,b=-1;
    scanf("%d",&a);
    to_arrayy(a);
        while(b!=6174&&b!=0){
            sort(num,num+4,cmp);
            b1=to_number(num);
            sort(num,num+4);
            b2=to_number(num);
            b=b1-b2;
            to_arrayy(b);
            printf("%04d - %04d = %04d\n",b1,b2,b);
        }
        return 0;
}

第一次,参考算法笔记进行优化,25min

#include<stdio.h>
#include<algorithm>
using namespace std;
int num[4];
void to_arrayy(int a){
    for(int i=0;i<4;i++){
        num[i]=a%10;
        a=a/10;
    }
}
int to_number(int num[]){
    int sum=0;
    for(int i=0;i<4;i++){
        sum=sum*10+num[i];
    }
    return sum;
}
bool cmp(int a,int b){
    return a>b;
}
int main(){
    int a,b1=0,b2=0;
    scanf("%d",&a);
        while(1){
            to_arrayy(a);
            sort(num,num+4,cmp);
            b1=to_number(num);
            sort(num,num+4);
            b2=to_number(num);
            a=b1-b2;
            printf("%04d - %04d = %04d\n",b1,b2,a);
            if(a==6174||a==0)break;
        }
        return 0;
}

第一次,优化