您的位置:首页 > 其它

(转)一个五位数字ABCDE*4=EDCBA

2012-08-26 12:55 357 查看


转自:http://kinghuimail.blog.163.com/blog/static/958204082010102784413898/




一道面试题:一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来(转)

2010-11-27 20:44:13| 分类: 学习笔记|字号 订阅

一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来.

先给一个网友的纯的推理过程:

ABCDE*4=EDCBA

很显然,A不是1,就是2,为0就不是五位数,为> 2则乘积不会是五位数

因为4*E的个位数是A,则A=2

所以题目变成2BCDE*4=EDCB2

显然,E是8(原因,乘以4个位为2的只有3,8,而根据高位2*4> =8,它只能为8

所以变成2BCD8 * 4 = 8DCB2

既然BCD8*4没有进位,因此B只能是0,1,2

假设B=0,则CD8*4=DC02, 4*D的尾数必须为7,这肯定不可能

假设B=1,则1CD8*4 = DC12,4*D的个位数为8,D必然=7,因为1*4> 2

1C78*4=7C12 C*4 = 30+C-3, C=9,满足

假设B=2,则2CD8 * 4= DC22, D=8或者9,根据C等于4*D+3的个位,可以得出C等于5或者9

所以等式必须为2588 *4 或者2998*4,很显然都不满足

所以只能是(A,b,C,d,e)=(2,1,9,7,8)

下面给出一个遍历的C语言解法:

#include <stdio.h>

int calc ()


{

    for (int i=10001; i<100000; i++)

    {

        int right = 0;

        int left = i;

        while ( left != 0 ) /*求右边的值*/

        {

            right = right * 10 + left % 10; 

            left /= 10;

        }

        

        if ( (i << 2) == right ) 

        {

            return i;

        }

    }

    return -1;

}

void main(void)

{

    printf("the result is : %d\n", calc());

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐