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); } }