一道小学数学题

题目

四位数abcd为A(即它的千位、百位、十位、各位分别是a,b,c,d),由它的四个数字a,b,c,d组成的最小四位数记为B。
如果A-B=999,那么这样的四位数共有多少?

C语言解法:

#include <stdio.h>
int main()
{
    int a[4];
    int temp;  //插入排序辅助变量
    int j;
    int count=0;  //计数器
    for(int i =1000;i<10000;i++)
    {
        a[0]=i/1000;    //a
        a[1]=i/100%10;  //b
        a[2]=i/10%10;   //c
        a[3]=i%10;      //d
        for(int k=1;k<4;k++){  //插入排序
            temp=a[k];
            j=k;
            while(j>0 && a[j-1]>temp){
                a[j]=a[j-1];
                j--;
            }
            a[j]=temp;
        }
        if(a[0]==0){  //如果a[0]为0,把和左起第一个非0数交换 
            j=0;
            while(a[j]==0&&j<4){
                j++;
            }
            temp=a[0];
            a[0]=a[j];
            a[j]=temp;
        }
        if(i-(1000*a[0]+100*a[1]+10*a[2]+a[3]) == 999){  //A-B=999
            printf("%d ",i);  //A
            ++count;
            if(count%6==0)  //每6个换行 
                printf("\n") ;
            //printf("%d%d%d%d\n",a[0],a[1],a[2],a[3]);  //B
        }
    }
    printf("\n一共有%d个解\n",count);  //解个数
    return 0;
    //system("pause");
} 

输出结果为:

 

【答案解析】

A-B=999得到A=B+(1000-1),如果B的末尾数不是0,那么A等于B将千位数字+1,个位数字-1。反过来B等于将A的千位数字-1,个位数字+1。所以B可以表示为(a-1)bc(d+1)。

B与A比较,b和c位置没有交换,交换的是a和d。B可以表示为dbca,所以a=d+1。a和d的取值组合有2bc1-1bc2=999,3bc2-2bc3=999,...,共八组。
对于其中任何一种组合,有六种可能a00d, a0dd, a0ad, adda, adad, aaad。以a=4,d=3为例,有4003,4033, 4043,4333, 4343, 4443这六个数,根据乘法原理,满足条件的四位数一共有有8×6=48种。

猜你喜欢

转载自blog.csdn.net/weixin_42467709/article/details/83449593