面試題目“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;
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM