題目:c++
你必定還記得小學學習過的乘法計算過程,好比:ide
273學習
x 15字體
------spa
1365it
273io
------class
4095搜索
請你觀察以下的乘法算式統計
***
x ***
--------
***
***
***
--------
*****
星號表明某位數字,注意這些星號中,
0~9中的每一個數字都剛好用了2次。
(如出現因字體而產生的對齊問題,請參看圖p1.jpg)
請寫出這個式子最終計算的結果,就是那個5位數是多少?
注意:只須要填寫一個整數,不要填寫任何多餘的內容。好比說明文字。
------------------------------------------------------------
劇透中......
笨笨有話說:
把全部可能的3位數乘以3位數搜索一遍的話....
關鍵是,這20個數字中0~9都用了兩次,須要統計每一個數字出現的次數...
看起來有點麻煩啊!
歪歪有話說:
我敢打賭!若是有某個數字出現次數不足2次,就必定有某個數字出現多於2次!
這樣,在累積出現次數的時候,只要看到某數已經出現3次了,就果斷否認之!
代碼以下:
#include<stdio.h>
int s,b,c,d,e,f,g,h,k,m;
void choose(int a)
{
switch(a)
{
case 0:s++;break;
case 1:b++;break;
case 2:c++;break;
case 3:d++;break;
case 4:e++;break;
case 5:f++;break;
case 6:g++;break;
case 7:h++;break;
case 8:k++;break;
case 9:m++;break;
}
}
main()
{
for(int i=100;i<=999;i++)
{
for(int j=100;j<=999;j++){
// int i=450;
// int j=250;
choose((i%100)%10);
choose((i%100)/10);
choose(i/100);
choose((j%100)%10);
choose((j%100)/10);
choose(j/100);
int r=i*j;
choose(((((r)%10000)%1000)%100)%10);
choose(((((r)%10000)%1000)%100)/10);
choose((((r)%10000)%1000)/100);
choose((((r)%10000)/1000));
choose(((r)/10000));
int x=((j%100)%10)*i;
choose((x%100)%10);
choose((x%100)/10);
choose(x/100);
int y=((j%100)/10)*i;
choose((y%100)%10);
choose((y%100)/10);
choose(y/100);
int z=(j/100)*i;
choose((z%100)%10);
choose((z%100)/10);
choose(z/100);
if(s==2&&b==2&&c==2&&d==2&&e==2&&f==2&&g==2&&h==2&&k==2&&m==2){
printf("%d*%d=%d",i,j,i*j);
}
s=b=c=d=e=f=g=h=k=m=0;
}
}
return 0;
}