1019 数字黑洞

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]);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值