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

PAT-1019 数字黑洞 (20分)

程序员文章站 2022-06-07 13:14:32
...

PAT-1019 数字黑洞 (20分)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;
}
相关标签: PAT乙级