题目: 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
———————
X Y Z D E
C语言答案如下:
#include <stdio.h>
int num[13];
long i,j;
void seperate(int* nums, long abcde, long dfg, long xyzde);
int check(void);
int main()
{
for(i=10234;i<=98765;i++)
{for(j=102;j<=987;j++)
{seperate(num,i,j,i+j*2);
if(check()) goto ok;
}}
ok:
printf(" %d%d%d%d%d\n",num[0],num[1],num[2],num[3],num[4]);
printf(" %d%d%d\n",num[5],num[6],num[7]);
printf(" + %d%d%d\n",num[5],num[6],num[7]);
printf("----------\n");
printf(" %d%d%d%d%d\n",num[8],num[9],num[10],num[11],num[12]);
}
void seperate(int* nums, long abcde, long dfg, long xyzde)
{
long n,p;
n=abcde;
nums[4]=n%10;
n=n/10;
nums[3]=n%10;
n=n/10;
nums[2]=n%10;
n=n/10;
nums[1]=n%10;
n=n/10;
nums[0]=n%10;
n=dfg;
nums[7]=n%10;
n=n/10;
nums[6]=n%10;
n=n/10;
nums[5]=n%10;
n=xyzde;
nums[12]=n%10;
n=n/10;
nums[11]=n%10;
n=n/10;
nums[10]=n%10;
n=n/10;
nums[9]=n%10;
n=n/10;
nums[8]=n%10;
}
int check()
{
int temp[10],m,n;
if(num[0]==num[8]) return 0;
if(num[1]==num[9]) return 0;
if(num[2]==num[10]) return 0;
if(num[3]!=num[11]||num[3]!=num[5]) return 0;
if(num[4]!=num[12]) return 0;
temp[0]=num[0];
temp[1]=num[1];
temp[2]=num[2];
temp[3]=num[3];
temp[4]=num[4];
temp[5]=num[6];
temp[6]=num[7];
temp[7]=num[8];
temp[8]=num[9];
temp[9]=num[10];
for(m=0;m<10;m++)
{
for(n=m+1;n<10;n++)
if(temp[m]==temp[n]) return 0;
}
return 1;
}
执行结果:
29786
850
+ 850
----------
31486
JavaScript 答案如下:
var types = [], explore;
explore = function (s, r) {
var len = s.length, i = 0;
if (len == 0) {
if(r[0]*10000 + r[1]*1000 + r[2]*100 + r[3]*10 + r[4] + r[4]*200 + r[5]*20 + r[6]*2 - r[7] * 10000 - r[8]*1000 - r[9]*100 - r[3]*10 - r[4]) {
}else{
types.push(r.join(''));
}
} else {
for (; i < len; i++) {
explore(s.slice(0, i).concat(s.slice(i + 1)), r.concat(s[i]));
}
}
};
// 执行并打印结果
explore([0,1,2,3,4,5,6,7,8,9], []);
console.log(types);
不明白的地方, 就是红色标注的。 为什么有了这个判断条件,就能输出想要的答案。
去除这个判断, 只能输出一堆数组。
求高人指点呀。