本文主要是介绍PAT 乙级 1019 数字黑洞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解法思路,我用c语言和python 做了这道题,这里面有一个小坑就是没说一定是4位整数,有可能是3位,2,1,位,用python排序时候需要注意,我c语言用的hash反而无所谓。。代码如下:
c语言代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int f_max(int count[])
{int i,count_c[10],max=0,mont=0;memcpy(count_c,count,sizeof(count_c));for(i=9;i>=0;i--){if(count_c[i]!=0){while(count_c[i]){max=max*10+i;count_c[i]--;mont++;} } }if(mont!=4){for(i=0;i<4-mont;i++)max=max*10;}return max;
}
int f_min(int count[])
{int i,count_c[10],min=0;memcpy(count_c,count,sizeof(count_c));for(i=0;i<10;i++){if(count_c[i]!=0){while(count_c[i]){min=min*10+i;count_c[i]--;} } }return min;
}
int count_f(int n,int count[])
{while(n){count[n%10]++;n=n/10;}return 1;
}
int main()
{int n,count[10]={0};scanf("%d",&n);if(n%1111==0)printf("%04d - %04d = %04d\n",n,n,0);else{int output=0,max,min;while(output!=6174){memset(count,0,sizeof(count));count_f(n,count);max=f_max(count);min=f_min(count);output=max-min;n=output;printf("%04d - %04d = %04d\n",max,min,output);}}return 0;}
python代码:
s=list(input())
while(len(s)<4):s.insert(0,'0')
if (s.count(s[0])==4):s=eval(''.join(s))print('{0:04} - {0:04} = {1:04}'.format(s,s-s))
else :output=0while(output!=6174):s_max=int(''.join(sorted(s,reverse=True)))s_min=int(''.join(sorted(s)))output=s_max-s_mins=str(output)if(len(s)<4):s='0'+sprint('{0:04} - {1:04} = {2:04}'.format(s_max,s_min,output))
这篇关于PAT 乙级 1019 数字黑洞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!