A 村的元宵节灯会上有一迷题:

    请猜谜 * 请猜谜 = 请边赏灯边猜

小明想,一定是每个汉字代表一个数字,不同的汉字代表不同的数字。

请你用计算机按小明的思路算一下,然后提交“请猜谜”三个字所代表的整数即可。

请严格按照格式,通过浏览器提交答案。

注意:只提交一个3位的整数,不要写其它附加内容,比如:说明性的文字。

答案 (10分)

 

搜索判断。

代码:

#include <iostream>
#include <cstdio>
using namespace std;
int s[6];
bool vis[10];
bool check() {
    int a = s[0] * 100 + s[1] * 10 + s[2];
    int b = s[0] * 100000 + s[3] * 10010 + s[4] * 1000 + s[5] * 100 + s[1];
    if(a * a == b) return true;
    return false;
}
void dfs(int k) {
    if(k >= 6) {
        if(check()) printf("%d%d%d\n",s[0],s[1],s[2]);
        return;
    }
    for(int i = 0;i < 10;i ++) {
        if(!vis[i]) {
            vis[i] = true;
            s[k] = i;
            dfs(k + 1);
            vis[i] = false;
        }
    }
}
int main() {
    dfs(0);
}

 

import java.math.BigInteger;

public class Main {
    private static int [] s = new int[6];
    private static boolean [] vis = new boolean[10];
    private static void dfs(int k) {
        if(k >= 6) {
            int d = s[0] * 100 + s[1] * 10 + s[2];
            int e = s[0] * 100000 + s[3] * 10010 + s[4] * 1000 + s[5] * 100 + s[1];
            if(d * d == e) System.out.println(s[0] + " " + s[1] + " " + s[2]);
            return;
        }
        for(int i = 0;i < 10;i ++) {
            if(!vis[i]) {
                vis[i] = true;
                s[k] = i;
                dfs(k + 1);
                vis[i] = false;
            }
        }
    }
    public static void main(String[] args) {
        dfs(0);
    }

}