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; }