zoukankan      html  css  js  c++  java
  • 面试题目“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;
    }
  • 相关阅读:
    1
    可测试性
    爬取信件信息(更新)
    爬虫爬取疫情数据存到文件
    python分析三国演义中出现次数最多的词作词频统计
    实验三
    scala统计学生成绩
    对于OpenCV的访问Mat元素的探究
    OpenCV+VS2017+Nivdia(待更新)
    Window10 CUDA和cunn安装
  • 原文地址:https://www.cnblogs.com/bestDavid/p/ProABCDE_Newidea.html
Copyright © 2011-2022 走看看