トピック
4桁のabcdはA(つまり、数千、数百、数十、それぞれがa、b、c、d)であり、最小の4桁はその4桁のa、b、c、dで構成されます。Bとして示されます。
AB = 999の場合、そのような4桁の数字はいくつありますか?
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");
}
出力結果は次のとおりです。
【回答分析】
AB = 999はA = B +(1000-1)を取得します。Bの最後の数が0でない場合、AはBに等しくなります。数千桁+1および1桁-1。逆に、BはA-1の1000桁と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、...、合計8つのグループです。
これらの組み合わせのいずれについても、a00d、a0dd、a0ad、adda、adad、aaadの6つの可能性があります。a = 4とd = 3を例にとると、4003、4033、4043、4333、4343、4443の6つの数字があります。乗算の原理によれば、合計8×6 = 48種類の4つの数字があります。条件を満たす桁数。