PAT-1019 数字黑洞 (20分)
程序员文章站
2022-06-07 13:14:32
...
昨晚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;
}