关于网友提出的“ 请教一个编程题,有点难度”问题疑问,本网通过在网上对“ 请教一个编程题,有点难度”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 请教一个编程题,有点难度描述:
如下图
O O O
O O O O
O O O O O
O O O O
O O O
要求在圆圈中填入 1 - 19 中一个数字,不得重复,最后每条直线上的数字之和相等。
请高手帮忙解决一下。
解决方案1:
22楼的方程写错了。应该是下面这样。
(1)所有点的和。 X+Y+Z+W=38*5
(2)所有3点直线的和。 2Y+W=38*6
(3)所有4点直线的和。 2Z+2W=38*6
(4)所有5点直线的和。 3X+Y+Z=38*3
这样的话就有解了。
先写数学模型,在考虑算法。
设
y1 w1 y2
w6 z1 z2 w2
y6 z6 x1 z3 y3
w5 z5 z4 w3
y5 w4 y4
X=x1
Y=sum(yn)
Z=sum(zn)
W=sum(wn)
1-19的和是190,也就是说每条线上的和是38。
列方程吧
(1)所有点的和。 X+Y+Z+W=38*5
(2)所有3点直线的和。 2Y+W=38*6
(3)所有4点直线的和。 2Z+W=38*6
(4)所有5点直线的和。 3X+Y+Z=38*3
最后算出X=-38,没有自然数解呀。遗憾。
x1+x2+x3=38
x4+x5+x6+x7=38
...
一共15个方程,然后编程实现消元(应该不用什么高斯消元吧)。
如果能将元消到4个的话,套4个for循环就能在有限时间里解决了。
用枚举法做了一下,方法如下:
1.找出所有3个数值之和等于38的所有组合(例如:1, 18, 19)
2.找出所有4个数值之和等于38的所有组合(例如:1, 2, 16, 19)
3.找出所有5个数值之和等于38的所有组合(例如:1, 2, 3,13, 19)
4.将以上组合进行位(与,或)运算。如果位不重复即使所要结果。
方法比较笨,可能还有更巧妙的方法,请高人指点!
源程序360L,所以就不贴出来共享了!
提个思路不知对否..
由于19个数字不能重复,图中共5行,9列,1至19的和为190。
所以题目中的每条直线不包括列,由此得出每行为38。
约束条件:
3个数字和等于38,且其中必有一个大于13
4个..
5个..
所有数字均不等。
你用奇数魔方生成法试试 感觉应该可以
解决方案7:这种类型题我感觉 编程之前 首先要弄清楚问题 搞清楚问题定义 与 问题的本质是什么 这个题目和组合数学中的幻方有点相似 但又不能直接用幻方构造的算法 看上去很麻烦 你用穷举试试吧
解决方案8:可以用回溯