猜方阵的思想/算法、试数法

来源:百度知道 编辑:UC知道 时间:2024/05/05 23:00:14
假设有一个n*m(n和m为几到二十左右,不确定n,m谁大)的方阵。corretNum是方阵里每列里随机选一个组成的组合,现在编写一个程序作交互,用户每写出一个试法,程序就返回下一次最佳应该试哪一个组合,引导用户以最少次数试出corretNum,

比如说第一列里面所有数都试了就差最后一个,那么后面的最后一个就不用试了,如果第一次试了第一行都是错误的,那么后面就不用试第一行里面任何一个数了。那如果第一次试试出有一个数是对的那后面应该怎么试呢,如果是对了多数又怎样呢?n<m呢?n>m呢?还有其它呢。

不求详细代码,只求其算法思想
corretNum存储的可以是数字,可以是字符串,它是一个数组(Array)。这里跟方阵里面存了什么没关系,不过可以假设为文字:
col[0] col[1] col[2]
row[0] 蚊子 玫瑰 9
row[1] 苍蝇 月季 6
row[2] 大象 草 13
row[3] 蛇 花 11
row[4] 蟑螂 大树 18
现在假如要选蛇,月季,18 那么corretNum={3,2,5}(即返回选中元素的row);
但当前不知道选的是什么,假如算法是从上往下及从右往左推的话,如果按一般方法每个元素都试一下,那么就要试九次才出来,如果加上行里所有元素都错那行就去掉和列里末一个元素不试的话,那只要试六次就可以了(000.111.222.333.(前面试出row[1],row[3],row[4]各有一元素),113(试出18).134)。

另外回二楼,我专业不是计算机,C语言也已经放下三年了,很多也有点模糊了。现在也不是用C语言写这个程序,但我主要是想知道一下具体算法,这个应该大部分涉及数学思想吧。如果要用到什么语言的话,C,JVAVSCRIPT,VBSCRIPT,ACTION SCRIPT我大概都能看懂的

什么乱七八糟的,方阵存的是什么,数?图形?文字?corretNum又是个什么,数字?组合又是什么,是排列组合的组合还是point变量?“corretNum是方阵里每列里随机选一个组成的组合”这是什么意思?选出m个数来求最佳组合???什么又叫最佳???天哪,这是什么表达能力啊,虽说是学计算机的也不能这样烂吧。
~~~~~~~~~
虽然你添加解释了,不过还是不懂,比如为什么每行最后一列可以不比对,你举例不也是比对了一次18?如果你存的所有内容没有丝毫相关性那没什么好办法,只能依次遍历。不过你好像做的是每一列都有个共同属性,那这样岂不是很容易啊,只要先用个switch把各个属性区分开来只需要比对几次就完了,假设矩阵存在a[n][m]中,那么
switch(你要找的东西属性)
{
case 动物:只比对a[i][0]
case 植物:只比对a[i][1]
case 数字:只比对a[i][2]
....
}
算法就是找出要比对的属性,再与矩阵中同属性的比,这是最快的方法。

如果输入的是数字,好办,先判断是不是数字,是数字就往 数字那一列找,如果只是返回一行,那找到直接退出。。。如果返回多行,那就必须全部遍历。。。或许先冒泡排序,把col【2】先排序,之后用二分查找法。。。

col【0】也是先排序,然后用二分查找法。。
col【1】也是先排序,然后用二分查找法。。。

至于排序后原来的行数必须保留,所以要用到struct,里面含有row[],还有一个数组col[],row[]用来保存行号,col[]用来二分查找。。。找到后返回相应的row。。。

估计可以做得出来。。

没明白你的意思!
只知道
有一个N*M的数列
corretNum方阵里每列里随机选一个组成的组合
是不是就跟我以前玩过的一个小游戏一样.
有一个4位数.让你猜,每一位对应一个猜对和不对.最后还有一个对了几个数字(应为有的时候数字对了但是顺序不对)
比如按说要猜的数字是1234,错误-0,正确-1
正确值:1 2 3 4<