`

由一个C入门题引发的思考

阅读更多

题目: 给定等式    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);

 

不明白的地方, 就是红色标注的。 为什么有了这个判断条件,就能输出想要的答案。

 

去除这个判断, 只能输出一堆数组。 

 

求高人指点呀。 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics