4.10 数字哑谜和回文
4.10 数字哑谜和回文
基本问题
基本问题1:找出符合条件的九位数,每位数互不相同(1~9的某个排列),满足高n位能被n整除。例如abcdefghi,高两位ab能被2整除,高三位abc能被3整除,以此类推。
解法
- 解法1 :穷举9^9,然后使用剪枝避免不必要的运算。
- 解法2:逻辑推理
a 可取1~9任何数
b 可取2 4 6 8
c 符合(a+b+c)能被3整除
d 可取2 4 6 8 且 cd能被4整除
e 可取5
f 可取2 4 6 8 且符合(a+b+c+d+e+f)被3整除
g 符合(abcd-efg)能被7整除
h 可取2 4 6 8 且符合(fgh)能被8整除
i 符合(a+b+c+d+e+f+g+h+i)被9整除
。。。。
answer : 381654729
基本问题2:人过大佛寺 * 我 =寺佛大过人 ,每个中文代表各不相同的0~9的数字。求出这个五位数
解法:采用枚举的方式,详情见代码。
拓展问题
拓展问题1:N位回文数有多少个呢?
暴力枚举
拓展问题2:(he)平方=(she),求s,h,e的值
e是末尾数字,由题意可知e的平方的末尾数字为e所以e的可能值为0,1,5,6,其中0不可能,否则she的末两位为00(比如20的平方为400),而h与e是不同的数剩下的事就是将其代入1,若e为1,则he为21,31,(he为41,he的平方为四位数...
\[s:6, h:2 ,e:5
\]
\[25*25=625
\]
All Coding
import java.util.Arrays;
//大致思路: 通过穷举五位数,找出一个数,如果这个数字能整除它的回文数,并且结果所得的数字和这个数不相同,也就是说总共有6个 0~9的数字。
public class huiwen {
public static void main(String[] args) {
printAll();
}
private static void printAll() {
//用来保存乘数的数组
boolean flag = true;
boolean IsUsed[] = new boolean[10];
int number, revert_number, temp, v = 0;
for (number = 12345; number < 100000; number++) {
flag = true;
Arrays.fill(IsUsed, false);
temp = number;
revert_number = 0;
for (int i = 0; i < 5 && flag == true; i++) {
v = temp % 10;
revert_number = revert_number * 10 + v;
temp /= 10;
if (IsUsed[v]) {
flag = false;
// break; 通过循环条件增加 flag==true 来取消 break 语句
} else {
IsUsed[v] = true;
}
}
if (flag == true && (revert_number % number == 0)) {
v = revert_number / number;
if (v < 10 && IsUsed[v] == false) {//只有该乘数不包含在五位数之内才合法
System.out.print("the result is: " + number + " * " + v + " = " + revert_number);
}
}
}
}
}
Saying Less Doing More