找回密码
 加入
搜索
查看: 16080|回复: 43

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

 火... [复制链接]
发表于 2012-4-16 02:02:39 | 显示全部楼层 |阅读模式
本帖最后由 kenan 于 2012-4-16 19:33 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +20 收起 理由
3mile + 20 好问题

查看全部评分

发表于 2012-4-16 08:06:24 | 显示全部楼层
晕  我竟然看不懂题意。。。
发表于 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、唯一候选数法:当某个宫格的候选数排除到只有一个数的时候,那么这个数就是该宫格的唯一必填数
当然还有很多其它高级的技巧,不过以上一般也就够了

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2012-4-16 08:31:22 | 显示全部楼层
本帖最后由 xyhqqaa 于 2012-4-16 08:34 编辑

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2012-4-16 09:44:23 | 显示全部楼层
这种学过算法的应该能做,当然比较伤脑子
没有科班出身的我,不会想,来学习记号一下
发表于 2012-4-16 15:53:01 | 显示全部楼层
问题很好玩,试下
为了不影响他人思路,隐藏了
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 2金钱 +38 贡献 +2 收起 理由
afan + 30
user3000 + 8 + 2 牛. 一点就出来了!

查看全部评分

发表于 2012-4-16 16:36:08 | 显示全部楼层
好东西还隐藏,看看先
发表于 2012-4-16 16:55:04 | 显示全部楼层
回复 6# 3mile
我没有思路,看看三笑大侠的思路
发表于 2012-4-16 17:26:52 | 显示全部楼层
9宫格,当年算了半天,只搞了一张,效率太低了
发表于 2012-4-16 18:45:19 | 显示全部楼层
学习一下电脑怎么搞
 楼主| 发表于 2012-4-16 18:53:50 | 显示全部楼层
回复 3# whitehead


    谢谢思路,等有时间把这个写一写
 楼主| 发表于 2012-4-16 18:55:47 | 显示全部楼层
增加两个问题:元素距离问题(这个是最简单的),扑克算24问题
有兴趣可以试一试

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-4-16 19:11:47 | 显示全部楼层
本帖最后由 kenan 于 2012-4-16 19:14 编辑

回复 6# 3mile

学习!!
发表于 2012-4-16 19:14:01 | 显示全部楼层
回复 13# kenan
#include <Array.au3>
Dim $begin = TimerInit()
Local $str,$msg1[1]
Local $run[4]=["+","-","*","/"]
Local $array[10]=[1,2,3,4,5,6,7,8,9,10]
$fin=_ArrayCombinations($array,4,",")
;_ArrayDisplay($fin)
For $b=1 To $fin[0]
        $aa=StringSplit($fin[$b],",",2)
        ;_ArrayDisplay($aa)
        For $i=0 To 3                
                For $j=0 To 3
                        For $k=0 To 3
                                $msg=$aa[0]&$run[$k]&$aa[1]&$run[$j]&$aa[2]&$run[$i]&$aa[3]
                                If Execute($msg)=24 Then _ArrayAdd($msg1,$msg&" = 24")                                
                        Next
                Next
        Next        
Next
_ArrayDisplay($msg1,TimerDiff($begin))

评分

参与人数 2金钱 +55 贡献 +5 收起 理由
afan + 30
502762378 + 25 + 5 非常亮

查看全部评分

 楼主| 发表于 2012-4-16 19:22:23 | 显示全部楼层
回复 15# 3mile


    题目说还可以加括号的
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-14 13:16 , Processed in 0.117397 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表