GOOGLE方程式


看到http://blog.csdn.net/orbit/article/details/6529277处给出的GOOGLE方程式问题,自己写了一个简单的程序解之。


#include <iostream>

#include <string>
using namespace std;

/*
  WWWDOT
- GOOGLE
----------
= 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值