1. 程式人生 > >2015藍橋杯B組第三題(三羊獻瑞)

2015藍橋杯B組第三題(三羊獻瑞)

三羊獻瑞

觀察下面的加法算式:
這裡寫圖片描述

其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。

請你填寫“三羊獻瑞”所代表的4位數字(答案唯一),不要填寫任何多餘內容。

個人用的DFS搜尋,在0~9是個數字中搜索8個數字來滿足題目中要求的算式條件,最有去掉開頭和第五位為0的情況,相比8重for迴圈效率還是挺快的,下面附上個人渣程式碼。

#include <iostream>

using namespace std;

int idx[10] = {false};
int n[8] = {0};

void solve()
{
    int res = n[0]*1000 + n[1
]*100 + n[2]*10 + n[3] + n[4]*1000 + n[5]*100 + n[6]*10 + n[1]; int res2 = n[4]*10000 + n[5]*1000 + n[2]*100 + n[1]*10 + n[7]; if (res == res2 && n[0] != 0 && n[4] != 0) { for (int i = 0; i < 8; i++) { cout<<n[i]<<" "; } cout<<endl; } } void
dfs(int i, int k) { if (k <= 0 || k >= 9) { return ; } idx[i] = true; n[k-1] = i; if (k == 8) { solve(); return ; } for (int x = 0; x <= 9; x++) { if (idx[x] == false) { idx[x] = true; dfs(x, k+1
); idx[x] = false; } } } int main() { for (int i = 0; i <= 9; i++) { idx[i] = true; dfs(i, 1); idx[i] = false; } return 0; }