找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 235|回复: 17

[【心情日记】] 难度骤增

[复制链接]
发表于 2023-8-25 01:04:33 | 显示全部楼层 |阅读模式
前几天做了个程序,可以处理用火柴棒摆成1位数加减乘除的式子,只动1根火柴使等式成立的问题。也有些游戏是两位数,想是否能修改程序支持。
结果发现复杂多了。原来不管怎么变,运算符号(包括等号)都不会超过2个。但是两位数一来就不一定了。比如9 - 8 = 98,答案是9 - 8 = 9 / 9,多出来了一个运算符。数字间的变换也复杂多了,一位数的话,一个数字只能变为另一个数字,但是两位数一来,4可以变成11。
多了一位,难度骤增,不禁打退堂鼓,不想搞了。

评分

1

查看全部评分

回复

使用道具 举报

发表于 2023-8-25 01:14:27 | 显示全部楼层
有个万能办法:如果题目没说明确,就把一根火柴移动到等号上,变成不等式。
回复

使用道具 举报

 楼主| 发表于 2023-8-25 01:16:24 | 显示全部楼层
横槊赋诗 发表于 2023-8-25 01:14
有个万能办法:如果题目没说明确,就把一根火柴移动到等号上,变成不等式。

规定不许用不等号,包括不等于,大于和小于号
回复

使用道具 举报

发表于 2023-8-25 01:22:34 | 显示全部楼层
本帖最后由 沧海一声笑 于 2023-8-25 01:24 编辑

建立个对照表,将每个数字对应的火柴棒模型,以及所有缺少1根火柴和增加1根火柴的模型(当然是正确的模型)。比如8可能变6或9
然后做个循环,判断是否是合理答案,(当然也要包括可能移动的火柴变成运算符号)

评分

1

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2023-8-25 01:28:20 | 显示全部楼层
沧海一声笑 发表于 2023-8-25 01:22
建立个对照表,将每个数字对应的火柴棒模型,以及所有缺少1根火柴和增加1根火柴的模型(当然是正确的模型) ...

一位数做出来了,两位数太复杂,除了分析复杂的转换规律,还得做个表达式的解析器,太麻烦。
回复

使用道具 举报

发表于 2023-8-25 01:36:09 | 显示全部楼层
agent124 发表于 2023-8-25 01:28
一位数做出来了,两位数太复杂,除了分析复杂的转换规律,还得做个表达式的解析器,太麻烦。

还有个问题就是是否允许出现2个等号?

比如11-1=1变成1=1=1是否合理?
回复

使用道具 举报

 楼主| 发表于 2023-8-25 01:38:52 | 显示全部楼层
本帖最后由 agent124 于 2023-8-25 01:41 编辑
沧海一声笑 发表于 2023-8-25 01:36
还有个问题就是是否允许出现2个等号?

比如11-1=1变成1=1=1是否合理?

这个合理,1位数就有这种情况,比如 9 + 9 = 9 有三个答案 9 + 0 = 9; 0 + 9 = 9; 9 = 9 = 9

另外,等号放在前面也是允许的,比如  1 - 8 = 7 也有三个答案  1 + 6 = 7; 7 - 0 = 7;1 = 8 - 7
回复

使用道具 举报

 楼主| 发表于 2023-8-25 01:41:10 | 显示全部楼层
另外,等号放在前面也是允许的,比如  1 - 8 = 7 也有三个答案  1 + 6 = 7; 7 - 0 = 7;1 = 8 - 7
回复

使用道具 举报

发表于 2023-8-25 01:48:31 | 显示全部楼层
本帖最后由 沧海一声笑 于 2023-8-25 02:54 编辑

还有就是我看了下网上的图片,1有的就是1根火柴棒,而有的是2根火柴棒竖排的,
所以编程时要对这方面做个硬性规定。





所以编程的复杂性的确够复杂的

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2023-8-25 01:54:11 | 显示全部楼层
沧海一声笑 发表于 2023-8-25 01:48
还有就是我看了下网上的图片,1有的就是1根火柴棒,而有的是2根火柴棒竖排的,这时候的11就不可能移动1根火 ...

对于数字的表达方式首先要做个规定,比如1是用1根还是两根
回复

使用道具 举报

发表于 2023-8-25 01:56:03 | 显示全部楼层
沧海一声笑 发表于 2023-8-25 01:22
建立个对照表,将每个数字对应的火柴棒模型,以及所有缺少1根火柴和增加1根火柴的模型(当然是正确的模型) ...

是的。建立对照表,或定义变化的operation,比如数字和符号的变化的operation。考虑到通则少,可能table更方便一些。

然后就是逐数字/符号的operation多重循环了(4重?本位、operation、目标位、operation)。

这样看,似乎增加digit不会带来难度骤增,因为貌似只是增加了位置的数量。

评分

1

查看全部评分

回复

使用道具 举报

发表于 2023-8-25 02:04:48 | 显示全部楼层
agent124 发表于 2023-8-25 01:54
对于数字的表达方式首先要做个规定,比如1是用1根还是两根

的确。否则图1中7移走1根火柴可能变成"-"或者"/"
而图2中的7则变成“1”了



回复

使用道具 举报

 楼主| 发表于 2023-8-25 02:05:30 | 显示全部楼层
本帖最后由 agent124 于 2023-8-25 02:06 编辑
gongqi 发表于 2023-8-25 01:56
是的。建立对照表,或定义变化的operation,比如数字和符号的变化的operation。考虑到通则少,可能table ...

一位数,运算符号的个数固定为两个,两位数就不一定了,比如  2 - 9 = 12 答案是 2 - 3 = 1 - 2,变成了3个运算符号,所以说要做个表达式解析器
回复

使用道具 举报

发表于 2023-8-25 02:09:36 | 显示全部楼层
agent124 发表于 2023-8-25 02:05
一位数,运算符号的个数固定为两个,两位数就不一定了,比如  2 - 9 = 12 答案是 2 - 3 = 1 - 2,变成了3 ...

增加位置不行吗?比如1位有1+1+1=3个位置,2位有3x2-1=5个位置。
回复

使用道具 举报

发表于 2023-8-25 02:16:15 | 显示全部楼层
agent124 发表于 2023-8-25 01:54
对于数字的表达方式首先要做个规定,比如1是用1根还是两根

个人倾向是1由2根火柴棒组成较为美观自然。
回复

使用道具 举报

 楼主| 发表于 2023-8-25 02:19:14 | 显示全部楼层
gongqi 发表于 2023-8-25 02:09
增加位置不行吗?比如1位有1+1+1=3个位置,2位有3x2-1=5个位置。

1位数不用考虑那么复杂,固定两个运算符,位置也固定。2位数,运算符的个数和位置都要考虑,麻烦许多。1位数简单用条件判断就可以确定4种情况(加减乘除)加上两个等号和等号在前面两种情况,共6种情况。而2位数情况复杂,所以需要写个表达式解析器才行,简单的条件判断不行了。
而且,数字的转换规律也复杂许多。1位数再怎么变,都是1位数变成另一个1位数,而两位数就复杂了,比如4可以变成11,就是一位数可以变成两位数,两位数也可以通过插入运算符号变成两个一位数,情况复杂许多。

评分

1

查看全部评分

回复

使用道具 举报

发表于 2023-8-25 02:26:41 | 显示全部楼层
agent124 发表于 2023-8-25 02:19
1位数不用考虑那么复杂,固定两个运算符,位置也固定。2位数,运算符的个数和位置都要考虑,麻烦许多。1 ...

如果是4变成11这种情况,其实可以直接判断等式是否成立了,因为移动的火柴不可能到其他地方了
回复

使用道具 举报

 楼主| 发表于 2023-8-25 06:58:08 | 显示全部楼层
又碰到几道题,需要修改原来的程序才能处理,特别是一道 4 + 0 = -4,答案 4 - 0 = +4
看来原来程序的设计有问题,虽然可以处理绝大多数1位数的问题,但因过度简化,造成扩展性差。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-10-1 07:37 , Processed in 0.192587 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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