PAT 乙级 1019 数字黑洞
2023-12-17 05:20:48
解法思路,我用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=0
while(output!=6174):
s_max=int(''.join(sorted(s,reverse=True)))
s_min=int(''.join(sorted(s)))
output=s_max-s_min
s=str(output)
if(len(s)<4):
s='0'+s
print('{0:04} - {1:04} = {2:04}'.format(s_max,s_min,output))
文章来源:https://blog.csdn.net/qq_44063802/article/details/135037579
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!