C语言 · 猜算式 · 乘法竖式

时间:2023-03-09 17:09:07
C语言  ·  猜算式  ·  乘法竖式

题目:猜算式

你一定还记得小学学习过的乘法计算过程,比如:

273

x   15

------

1365

273

------

4095

请你观察如下的乘法算式

***

x   ***

--------

***

***

***

--------

*****

星号代表某位数字,注意这些星号中,0~9中的每个数字都恰好用了2次。 (如因字体而产生对齐问题,请参看图p1.jpg)

条件:每个数字要出现两次、公式要成立、结果是五位数。

请写出这个式子最终计算的结果,就是那个5位数是多少?

 #include<stdio.h>
#include<string.h>
int jinwei(int i,int *f){
while(i>){
if(f[i%]==){
return ;
}
f[i%]++;
i/=;
}
return ;
}
bool check(int i,int j,int a,int b,int c,int d){
int x[]={i/,(i/)%,i%,j/,(j/)%,j%,a/,(a/)%,a%,b/,(b/)%,b%,c/,(c/)%,c%,d/,(d/)%,(d/)%,(d/)%,d%};
int y[]={};
for(int h=;h<;h++){
y[x[h]]++;
}
for(int h=;h<;h++){
if(y[h]!=){
return false;
}else{
return true;
}
}
}
int main(){
int i,j;
for(i=;i<=;i++){
for(j=;j<=;j++){
int f[]={};//数组初始化
int a = i*(j%);//乘个位得
int b = i*((j/)%);//乘十位得
int c = i*(j/);//乘百位得 if(a>=||b>=||c>=||i*j>=||a<||b<)
continue; if(!check(i,j,a,b,c,i*j))
continue; if(i<j && jinwei(i,f)&&jinwei(j,f)&&jinwei(i*j,f)&&jinwei(a,f)&&jinwei(b,f))
printf("%d %d %d %d %d %d\n",i,j,a,b,c,i*j);
}
}
return ;
}