题目
四位数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种。