填数字游戏ABCD*E=DCBA
生活随笔
收集整理的這篇文章主要介紹了
填数字游戏ABCD*E=DCBA
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1.問題描述
- 2.問題分析
- 3.代碼
- 4.總結
1.問題描述
有這樣一個算式:
ABCD×EDCBA\frac {ABCD \atop ×E} {DCBA} DCBA×EABCD??
其中ABCDE代表的數字各不相同。編寫一個程序,計算出A、B、C、D、E各代表什么數字。
2.問題分析
這道題的實質就是要求這樣一個4位數字ABCD和1位數E,要求它們的乘積等于DCBA。同時A、B、C、D、E互不相等。
最直觀簡單的方法就是采用窮舉法。也就是在4位的整數集合[1000, 9999]和1位整數集合[1, 9]中找到符合上述算式條件的4位數字ABCD和1位數E
約束條件:
1.ABCD*E=DCBA
2.A、B、C、D、E所代表的整數互不相等
已知ABCD如何求解DCBA?
詳見上一篇文章中:
判斷回文數字->2.問題分析->如何求解一個數的“倒置數”
如何判斷A、B、C、D、E互不相等
不重不漏地比較10對數
3.代碼
#include "stdafx.h" #include "stdlib.h" #include <iostream> using namespace std; //求i的倒置數 int reverse(int i) {int r = 0;while(i){r = r * 10 + i % 10;i = i / 10;}return r; }//判斷A、B、C、D、E是否互不相等 int fun(int abcd, int e) {int arr[4],k = 0;while(abcd){arr[k] = abcd % 10;abcd = abcd / 10;k++;}if(arr[0] == arr[1]) return 0; //(A,B)if(arr[0] == arr[2]) return 0; //(A,C)if(arr[0] == arr[3]) return 0; //(A,D)if(arr[0] == e) return 0; //(A,E)if(arr[1] == arr[2]) return 0; //(B,C)if(arr[1] == arr[3]) return 0; //(B,D)if(arr[1] == e) return 0; //(B,E)if(arr[2] == arr[3]) return 0; //(C,D)if(arr[2] == e) return 0; //(C,E)if(arr[3] == e) return 0; //(D,E)return 1; } int main(int argc, char* argv[]) {int abcd,e;for(abcd = 1000; abcd < 10000; ++abcd){for(e = 1; e < 10; ++e){if(fun(abcd,e) && abcd * e == reverse(abcd)){cout << abcd << endl;cout << " *" << e << endl;cout << "----" << endl;cout << abcd * e<< endl;}}}system("pause");return 0; } /*輸出: 2178*4 ---- 8712 */4.總結
本題的關鍵在于
1、計算“倒置數”
2、判斷A、B、C、D、E互不相等
總結
以上是生活随笔為你收集整理的填数字游戏ABCD*E=DCBA的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RBAC vs ABAC
- 下一篇: 【夜读】不要让今天的懒,成为你明天的难