面试题目“ABCDE × 4 = EDCBA”新解法

ABCDE*4=EDCBA

       在面试宝典上面看到的一道题目,也是一道老掉牙的题目了,题目详情:一个五位数字ABCDE*4=EDCBA,这五个数字不重复,请编程求出来.

  网上流传的代码都是对5位数ABCDE的所有可能情况作遍历,即从10000 - 99999;我的想法是对EDCBA作遍历,从遍历的范围来说,为原来的1/4,因为EDCBA必须能被4整除才可以,然后遍历的初始位置也发生改变,本来是10000,现在直接变成10000 * 4,范围又减少了一半左右。对于这道程序来说,效果并不明显,我仅仅是提供另一种思路,用逆向的思维来解答问题。对于题目中的要求:每个数字必须不重复,在数学的角度来说,这应该是不会重复的,要加上这个不重复的条件也可以,只是程序会变得繁琐不简洁。对这道题来说,加不加影响不大。

  用EDCBA来遍历的代码如下:

#include <stdio.h>
#include <stdlib.h>
int findNUM(void)
{
    int cnt = 0;
    int N = 0;    //EDCBA
    int Nswitch = 0;   //ABCDE
    for(cnt = 10000 * 4; cnt <= 99999; cnt += 4)// 初始位置是40000,因为ABCDE最小为10000,那EDCBA最小为40000
    {
        Nswitch = 0;
        N = cnt;
        //将EDCBA变换为ABCDE
        do
        {
            Nswitch = Nswitch * 10 + N % 10;
            N /= 10;
        }while(N != 0);
        if((cnt >> 2) == Nswitch)
        {
            return cnt; //找到该数并返回
        }
    }
    return -1;//找不到,返回-1
}
int main(void)
{
    int result = findNUM();
    switch(result)
    {
        case -1:
            {
                printf("the number isn't exist!\n");
                break;
            }
        default:
            {
                printf("the ABCDE is  %d\n", result / 4);
                printf("the EDCBA is  %d\n", result);
                break;
            }
    }
    return 0;
}


注:本博客与博客园上的博客为同一博客主: http://www.cnblogs.com/bestDavid/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值