2015藍橋杯B組第三題(三羊獻瑞)
阿新 • • 發佈:2019-02-11
三羊獻瑞
觀察下面的加法算式:
其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。
請你填寫“三羊獻瑞”所代表的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;
}