1019 数字黑洞
今天就不抄题目了,我真的被这个题气到了,第一次提交测试点2、4、5过不去,然后改了一下,4过去了,我又看了好久的代码,又去百度搜去博客搜,好多文都是说一说注意这个点,注意它,也不说明应该怎样,算了,那我知道注意什么了,我就自己猜吧,再提交5过不去了,又改了好久,最后被自己气到了,我竟然7641写成了7614?杀了我吧。
测试点2和4:
都是数字的问题,虽然本题要的是4位数字,但是并没有明确指出要输入一个4位数,所以可能我们直接做就是考虑输入4位数,但是也要考虑其他。输入的不是要补0的,我写的代码不用在输入第一个数时补0,因为直接求的是四个数。但是你输出的时候不一定是4位,所以要补0,我的方法是直接输出排序后的四位数,因为0已结在这4个数里了,比如你输入2300,当输出的时候就是3200-0023;这个题到处是坑,也许是我还不够大佬吧。输出式子前面的两个数要注意补0,等号后的也要注意。
测试点5:
这个就是输入6174的时候,应该输出7641 - 1467 = 6174。所以就直接设个if就成。(注意不要像我一样把数字写倒)
或许输入0的时候不是个点吧,我试了一下,不管你输出0000 - 0000 = 0000还是0 - 0 = 0000,都是满分。
代码:
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,max=0,temp,j,qian,hou;
int a[10],b[10];
scanf("%d",&n);
a[0]=n/1000;
a[1]=(n-1000*a[0])/100;
a[2]=(n-1000*a[0]-100*a[1])/10;
a[3]=n%10;
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3])
{
printf("%d - %d = 0000",n,n);
}
else if(n==6174)
{
printf("7641 - 1467 = 6174");
}
else
{
while(n!=6174)
{
a[0]=n/1000;
a[1]=(n-1000*a[0])/100;
a[2]=(n-1000*a[0]-100*a[1])/10;
a[3]=n%10;
for(j=3;j>0;j--)
{
max=0;
for(i=1;i<=j;i++)
{
if(a[max]<a[i])
{
max=i;
}
}
if(max!=j)
{
temp=a[max];
a[max]=a[j];
a[j]=temp;
}
}
qian=a[3]*1000+a[2]*100+a[1]*10+a[0];
hou=a[0]*1000+a[1]*100+a[2]*10+a[3];
n=qian-hou;
b[0]=n/1000;
b[1]=(n-1000*b[0])/100;
b[2]=(n-1000*b[0]-100*b[1])/10;
b[3]=n%10;
printf("%d%d%d%d - %d%d%d%d = %d%d%d%d\n",a[3],a[2],a[1],a[0],a[0],a[1],a[2],a[3],b[0],b[1],b[2],b[3]);
}
}
}