猜算式
你一定还记得小学学习过的乘法计算过程,比如:
273
x 15
------
1365
273
------
4095
请你观察如下的乘法算式
x 15
------
1365
273
------
4095
请你观察如下的乘法算式
***
x ***
--------
***
***
***
--------
*****
星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p1.jpg)
x ***
--------
***
***
***
--------
*****
星号代表某位数字,注意这些星号中,
0~9中的每个数字都恰好用了2次。
(如因字体而产生对齐问题,请参看图p1.jpg)
请写出这个式子最终计算的结果,就是那个5位数是多少?
注意:只需要填写一个整数,不要填写任何多余的内容。比如说明文字。
思路:用数组来储存数字出现的次数,记得每次memset一次数组,纯暴力
#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int num[10];
void jishu(int x,int y){
int temp;
temp=x*y;
if(temp>=100&&temp<=1000){
while(temp){
num[temp%10]++;
temp=temp/10;
}
}
}
void chuli(int x,int y){
int temp;
temp=x*y;
if(temp>=10000&&temp<100000){
while(temp){
num[temp%10]++;
temp=temp/10;
}
}
}
bool panduan(){
int i;
for( i=0;i<10;i++){
if(num[i]==2)
continue;
else
break;
}
if(i==10)
return true;
else
return false;
}
int main(){
for(int i=100;i<1000;i++){
for(int j=100;j<1000;j++){
memset(num,0,sizeof(num));
jishu(i,1);
jishu(j,1);
jishu(i,j/100);
jishu(i,j%10);
jishu(i,j%100/10);
chuli(i,j);
if(panduan()==true){
printf("%d\n",i*j);
break;
}
}
}
return 0;
}