看到http://blog.csdn.net/orbit/article/details/6529277处给出的GOOGLE方程式问题,自己写了一个简单的程序解之。
#include <iostream>
#include <string>using namespace std;
/*
WWWDOT
----------
= DOTCOM
*/
char index[10] = {'W', 'D', 'O', 'T', 'G', 'L', 'E', 'C', 'M', 'X'};
bool used[10];
struct Item{
char c;
int value;
};
bool leading_valid(char c, int i)
{
if((c == 'W' && i == 0) || (c == 'G' && i == 0) || (c == 'D' && i == 0)) return false;
return true;
}
int str_to_int(int* re_mp, char* str)
{
int result = 0;
for(int i = 0; i < 6; i ++)
result = result * 10 + re_mp[str[i]];
return result;
}
bool check(Item *mp)
{
int re_map[255];
for(int i = 0; i < 10; i ++)
re_map[mp[i].c] = mp[i].value;
int num1 = str_to_int(re_map, "WWWDOT");
int num2 = str_to_int(re_map, "GOOGLE");
int result = str_to_int(re_map, "DOTCOM");
if(num1 - num2 == result) return true;
else return false;
}
void search(int num, Item* mp)
{
if(num == 10)
{
if(check(mp))
{
cout << "successful map\n";
for(int i = 0; i < 10; i ++)
cout << mp[i].c << " " << mp[i].value << endl;
}
}
else
{
for(int i = 0; i < 10; i ++)
{
if(used[i] == 0 && leading_valid(index[num], i))
{
used[i] = 1;
mp[num].c = index[num];
mp[num].value = i;
search(num + 1, mp);
used[i] = 0;
}
}
}
}
int main()
{
Item mmap[10];
memset(used, 0, sizeof(used));
search(0, mmap);
system("pause");
return 0;
}