kenan 发表于 2012-4-16 02:02:39

ACM竞赛问题——九宫格问题,元素距离问题,扑克算24问题(13L)

本帖最后由 kenan 于 2012-4-16 19:33 编辑

昨天学校ACM竞赛10道题目
很多只做出一道,好像六七个做出2道,一个做出3道
我只做出一道,本来那道扑克算24是可以做出来的,但就在死0不能做除数这个问题上
其中第二道,老师说是算是比较简单的九宫格问题,但我就是想不出来,所以求思路

haijie1223 发表于 2012-4-16 08:06:24

晕我竟然看不懂题意。。。

whitehead 发表于 2012-4-16 08:12:08

本帖最后由 whitehead 于 2012-4-16 10:18 编辑

这类问题也叫数独,技巧如下:
首先,先用以下方法多填入一些数,已知数越多越容易。
0、行和列没区别,我只说行,行分为123、456、789三组,每一组里每个数字要出现三次。对一组里已出现2次的数字,第三次出现在何处用一个宫来确定。
通常从全数独已知数中出现次数最多的数开始。比如,楼主例子中456行这一组3出现两次,第三次3应该出现在第4行及789中某一列,由图可知只能是第4行第7列。有时可通过456行及789列交叉的那一个宫中每个数字只能出现一次来决定。本例5、7两个数字也可以类似做。用此法尽量找出足够多的已知数,然后用下面几条,大体上差不多了。

1、唯一解法:当某行、列已填数字的宫格达到8个,那么该行、列剩余宫格能填的数字就只剩下那个还没出现过的数字了。成为行唯一解。
2、唯余解法:某宫格可以添入的数已经排除了8个,那么这个宫格的数字就只能添入那个没有出现的数字。
3、余数测试法:在某行或列,九宫格所填数字比较多,剩余2个或3个时,在剩余宫格添入值进行测试的解题方法。
4、唯一候选数法:当某个宫格的候选数排除到只有一个数的时候,那么这个数就是该宫格的唯一必填数
当然还有很多其它高级的技巧,不过以上一般也就够了

xyhqqaa 发表于 2012-4-16 08:31:22

本帖最后由 xyhqqaa 于 2012-4-16 08:34 编辑

九宫格应该不难吧。。。有规律的。。。斜着看。斜着写。。对边互补。。。。
结果呢

seniors 发表于 2012-4-16 09:44:23

这种学过算法的应该能做,当然比较伤脑子
没有科班出身的我,不会想,来学习记号一下

3mile 发表于 2012-4-16 15:53:01

问题很好玩,试下
为了不影响他人思路,隐藏了
**** Hidden Message *****

jinefo 发表于 2012-4-16 16:36:08

好东西还隐藏,看看先

xms77 发表于 2012-4-16 16:55:04

回复 6# 3mile
我没有思路,看看三笑大侠的思路

pp648852 发表于 2012-4-16 17:26:52

9宫格,当年算了半天,只搞了一张,效率太低了

whitehead 发表于 2012-4-16 18:45:19

学习一下电脑怎么搞

kenan 发表于 2012-4-16 18:53:50

回复 3# whitehead


    谢谢思路,等有时间把这个写一写

kenan 发表于 2012-4-16 18:55:47

增加两个问题:元素距离问题(这个是最简单的),扑克算24问题
有兴趣可以试一试

kenan 发表于 2012-4-16 19:11:47

本帖最后由 kenan 于 2012-4-16 19:14 编辑

回复 6# 3mile

学习!!

3mile 发表于 2012-4-16 19:14:01

回复 13# kenan
#include <Array.au3>
Dim $begin = TimerInit()
Local $str,$msg1
Local $run=["+","-","*","/"]
Local $array=
$fin=_ArrayCombinations($array,4,",")
;_ArrayDisplay($fin)
For $b=1 To $fin
      $aa=StringSplit($fin[$b],",",2)
      ;_ArrayDisplay($aa)
      For $i=0 To 3               
                For $j=0 To 3
                        For $k=0 To 3
                              $msg=$aa&$run[$k]&$aa&$run[$j]&$aa&$run[$i]&$aa
                              If Execute($msg)=24 Then _ArrayAdd($msg1,$msg&" = 24")                              
                        Next
                Next
      Next      
Next
_ArrayDisplay($msg1,TimerDiff($begin))

kenan 发表于 2012-4-16 19:22:23

回复 15# 3mile


    题目说还可以加括号的
页: [1] 2 3
查看完整版本: ACM竞赛问题——九宫格问题,元素距离问题,扑克算24问题(13L)