PAT-1019 数字黑洞 (20分)

在这里插入图片描述在这里插入图片描述

昨晚4.27,更应该说是今天早上的一点看到这道题目的。是一道常规的题目:
当时晚上躺床上了思路也是这样的:
算法的步骤如下:
(1):输入数字,定义数组(这里假设为arr),定义最大最小值
(2):定义函数,实现操作:将数字上的每一位放到数组。
(3):求最小MIN.–>对上面的数组去排序,但是不设置cpm是降序的,设置函数实现:降序数组的求和
求最大MAX.–>对上面的数组去排序,设置cmp为升序,设置函数实现:升序数组求和
(4):做差输出,保留四位,同是要有循环。循环结束条件是6174和1.

代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int a,int b){
    return a>b;
}
//将位上的数组存在数组里面
void arr_to_ch(int nums,int arr[]){
    for(int i=0;i<4;i++){
        arr[i]=nums%10;
        nums/=10;
    }
}
//对上面的为数组去进行组合
int c_to_sum(int arr[]){
    int sum=0;
    for(int i=0;i<4;i++){
        sum=sum*10+arr[i];
    }
    return sum;
}
int main(){
    int num;
    cin>>num;
    int arr[5];
    int MAX,MIN;
    for(;;){
        arr_to_ch(num,arr);
        //对位数组去进行排序
        sort(arr,arr+4);
        MIN=c_to_sum(arr);//获取最小值
        sort(arr,arr+4,cmp);//重新排序,获取最大值
        MAX=c_to_sum(arr);
        num=MAX-MIN;
		printf("%04d - %04d = %04d\n",MAX,MIN,num);
        if(num==0||num==6174) break;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44110100/article/details/105806206