puzzle(1231)数字哑谜

目录

一,abcdefghi

二,人过大佛寺*我=寺佛大过人

三,he*he=she

1,在10进制下求解:he*he=she

2,在k进制下求解:he*he=she


一,abcdefghi

出自编程之美4.10

有一个9位数abcdefghi的各位数字都不相同且全都不为0,并且二位数ab可被2整除,三位数abc可被3整除,四位数abcd可被4整除,......,九位数abcdefghi可被9整除,请问这个九位数abcdefghi是多少?

解:首先表述所有的条件:
e=5,acgi是1379,bdfh是2468
3|a+b+c
4|2c+d
3|d+5+f
7|(abcd5fg)
8|2g+h
这些条件都是必须满足的,而且满足这些条件就满足原题所有条件。

因为7|1001,所以7|(abcd5fg)即7|a+g-d+3(f-c)+2(5-b)
再次表述所有条件:

e=5,acgi是1379,bdfh是2468
3|a+b+c
d=2,f=8 或者 d=6,f=4
7|a+g-d+3(f-c)+2(5-b)
g=1或5,h=6 或者 g=3或7,h=2

列举bdfh的情况,再次表述所有条件:

e=5,acgi是1379
3|a+b+c
d=2,f=8 g=1,h=6 b=4 或者 d=6,f=4 g=3或7,h=2 b=8
7|a+g-d+3(f-c)+2(5-b)

下面分2种情况:

(1)

e=5,acgi是1379
3|a+b+c
d=2,f=8 g=1,h=6 b=4
7|a+g-d+3(f-c)+2(5-b)
即:

e=5,aci是379
3|a+c+1
d=2,f=8 g=1,h=6 b=4
7|a-3c+4
但是 aci是379 和 3|a+c+1 矛盾

(2)

e=5,acgi是1379
3|a+b+c
d=6,f=4 g=3或7,h=2 b=8
7|a+g-d+3(f-c)+2(5-b)
即:
e=5,acgi是1379
3|a+c-1
d=6,f=4 g=3或7,h=2 b=8
7|a+g-3c


这样就得到了唯一解:abcdefghi=381654729

二,人过大佛寺*我=寺佛大过人

出自编程之美4.10

求解:人过大佛寺*我=寺佛大过人,其中每个字代表一个不同的数字,人和寺不为0

解:讨论我的值

(1)我>=5,那么人=1

那么寺>=我,寺*我≡1(mod 10)

那么我和寺都是奇数

枚举6种情况,发现只有寺=我=9满足寺*我≡1(mod 10),但是与题意矛盾

(2)我=4,即 人过大佛寺*4=寺佛大过人

这是网上流传还比较广的一个puzzle

因为人是偶数所以人=2

所以寺=8或9

因为寺*4≡2(mod 10)所以寺=8

即 过大佛*4+3=佛大过

因为过是奇数所以过=1

所以佛>=4且佛*4≡8(mod 10)

所以佛=7,大=9

于是 人过大佛寺*4=寺佛大过人 有唯一解21978*4=87912

(3)我<4

很明显我>1,所以我=2或3

当我=2时,满足a≡2e(mod 10)且e>=2a的唯一解是e=6,a=2,但是这与我=2矛盾

当我=3时,满足a≡3e(mod 10)且e>=3a的唯一解是e=7,a=1

于是abcde<20000,edcba>70000,矛盾!

综上,满足条件的唯一解是21978*4=87912

三,he*he=she

出自编程之美4.10拓展问题2

1,在10进制下求解:he*he=she

解:s*100=she-he=he*he-he=he(he-1)

因为(he,he-1)=1,100=4*25

所以4|he,25|he-1或者4|he-1,25|he

如果4|he,25|he-1,那么he=76,s=57,矛盾

如果4|he-1,25|he,那么he=25,s=6

综上,唯一解是25*25=625

2,在k进制下求解:he*he=she

解:同上可得,s*k*k=he(he-1)

因为(he,he-1)=1

所以k=u*v, (u,v)=1, he=a*u*u, he-1=b*v*v, s=a*b

所以a*u*u=b*v*v+1,即a是u*u mod v*v 的逆元,且0<a<v*v

即a是(u mod v*v的逆元)的平方(再mod v*v)

注:这里我们得到一个有趣的小结论,he一定是完全平方数!

现在问题转化为,求u,v,b 使得u>1,v>1,(u,v)=1,取c是u mod v*v的逆元的话,有b*v*v=(c*u-1)(c*u+1)

且c*c*b<u*v(这个是因为0<s<k)

设c*u-1=d*v那么b*v=d(d*v+2)

所以v|2*d

现在问题转化为,求正整数u,v,c,d,g,使得c*u=d*v+1且2*d=v*g且c*c*(g+d*d)<u*v

这样的五元组和方程he*he=she的解是一一对应的

u*v进制,he=c*c*u*u,s=c*c*(g+d*d),很明显这样的he和she是满足he*he=she的,而上面的整个过程也说明了,he和s只能对应上述五元组,所以是一一对应的。

像这样的解有很多很多,最小的解是6进制下13*13=213,对应c=d=g=1,u=3,v=2

如果取g=1,那么c*u=2*d*d+1,v=2*d,不等式c*c*(g+d*d)<u*v恒成立

对于任意的d,都可以找到合适的c,u,v满足条件

比如c=1,u=2*d*d+1,v=2*d

所以对于任意d,取u=2*d*d+1,v=2*d,he=u*u,s=d*d+1,都有:

在u*v进制下he*he=she,这就得到了无穷个解,当然,并不是所有的解。

比如,d=1,6进制下13*13=213

d=2,36进制下29*29=529

d=1和d=2是仅有的不需要借助字母就可以表达的情况

实际上,h=d,e=u=2*d*d+1,s=d*d+1  这是无穷个解的通项公式,但是并不是所有解的通项公式。

单词搜索迷宫(Word Search Puzzle)问题是一个经典的算法问题,其输入是一个二维的字符数组和一组单词,目标是找出字符数组网格中的所有单词。这些单词可以是水平的、垂直的或者是任意的对角线方向,所以需要查找8个不同的方向。解决这个问题的一种常见方法是使用回溯算法,具体步骤如下: 1. 遍历二维字符数组,对于每个字符,以其为起点开始搜索,搜索的方向包括水平、垂直和对角线方向。 2. 对于每个搜索到的单词,将其记录下来。 3. 重复步骤1和2,直到遍历完整个二维字符数组。 下面是一个使用C#语言实现的单词搜索迷宫算法的示例代码: ```csharp class WordSearchPuzzle { private char[,] grid; private HashSet<string> words; public WordSearchPuzzle(char[,] grid, HashSet<string> words) { this.grid = grid; this.words = words; } public void Solve() { int rows = grid.GetLength(0); int cols = grid.GetLength(1); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { Search(i, j, new StringBuilder()); } } } private void Search(int row, int col, StringBuilder sb) { if (row < 0 || row >= grid.GetLength(0) || col < 0 || col >= grid.GetLength(1)) { return; } sb.Append(grid[row, col]); string word = sb.ToString(); if (words.Contains(word)) { Console.WriteLine("Found '{0}' at [{1}, {2}] to [{3}, {4}]", word, row, col, row - sb.Length + 1, col - sb.Length + 1); } if (word.Length < 3) { Search(row + 1, col, sb); Search(row - 1, col, sb); Search(row, col + 1, sb); Search(row, col - 1, sb); Search(row + 1, col + 1, sb); Search(row - 1, col - 1, sb); Search(row + 1, col - 1, sb); Search(row - 1, col + 1, sb); } sb.Remove(sb.Length - 1, 1); } } // 使用示例 char[,] grid = new char[,] { {'t', 'h', 'i', 's'}, {'w', 'a', 't', 's'}, {'o', 'a', 'h', 'g'}, {'f', 'g', 'd', 't'} }; HashSet<string> words = new HashSet<string>() { "this", "two", "fat", "that" }; WordSearchPuzzle puzzle = new WordSearchPuzzle(grid, words); puzzle.Solve(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值