中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-10 14:56
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行
DOS批处理 & 脚本技术(批处理室) » [共同参与][挑战思路] 求一列数所有不同组合的和
可打印版本  12,608 / 21
第1楼 namejm 发表于 2006-12-30 10:40
荣誉版主 发帖 1,737 积分 5,226 来自 成都
[共同参与][挑战思路] 求一列数所有不同组合的和
  给出一个纯数值文本,一行一条记录,无空行,求这一列数值所有不同组合的和(行号相同而数值出现顺序不同的组合视为同一组合),要求输出格式为 n1+n2+n3=sum。

  比如文本内容为:

  要求输出的格式为(次序可以打乱):

  1+2+3=6 和 2+1+3=6 视作同一组合。

[ Last edited by namejm on 2006-12-29 at 09:55 PM ]
第2楼 lxmxn 发表于 2006-12-30 10:47
版主 发帖 4,938 积分 11,386

  不明白是什么意思?举个简单的例子?
第3楼 pengfei 发表于 2006-12-30 10:54
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
namejm兄的意思是一个文本中每一行都有一个数字(大概二十个数), 要计算出这些数字所有可能的和.

test.txt



要求用批处理处理后的结果为:
第4楼 a9319751 发表于 2006-12-30 19:53
中级用户 发帖 170 积分 439


代码并不完善,下面这个替换不知道应该怎么写,希望大家指正
call set sumf=!sumf:+%%n%%i%%=!
第5楼 Primalchaos 发表于 2006-12-31 04:53
初级用户 发帖 19 积分 41
顶起来!想知道。
第6楼 无奈何 发表于 2006-12-31 05:38
荣誉版主 发帖 356 积分 1,338
a9319751 兄的代码错误较多,发现的错误有丢失了组合、重复、部分计算结果错误等。

namejm 兄提出的这个问题,非常复杂。我一直没有找到好的方法,现在我能完成的最好情况也丢失 4 组组合,我知道问题出在哪里,苦于没有办法转换成有效的批处理语句。
先帖一下代码,以后有时间再完善吧,希望能看到哪位兄弟完成这个题目。



  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. set n=0
  4. set file=%1
  5. set yinzi=
  6. for /f "delims=" %%a in (%file%) do (
  7. set /a n+=1
  8. call :sub %%a !n!
  9. )
  10. goto :EOF

  11. :sub
  12. for /f "tokens=1,2* delims=:" %%a in ('more +%2 %file%^|findstr /n .') do (
  13. call set yinzi%%a=%1
  14. for /l %%m in (1,1,%%a) do (
  15. call set yinzi%%m=!!yinzi%%m!! + %%b
  16. call set /p x=!!yinzi%%m!! = <nul
  17. call set /a x=!!yinzi%%m!!
  18. echo !x!
  19. )
  20. )
  21. goto :EOF
无奈何发表于 2006-12-30 16:25

输出结果:


丢失项:
第7楼 youxi01 发表于 2006-12-31 12:24
高级用户 发帖 247 积分 846 来自 湖南==》广东
也贴一段效率不怎样高的代码:



说明:文本文件test.txt中的数字至少需要不重复的三行!
第8楼 dbc6013 发表于 2006-12-31 21:49
初级用户 发帖 16 积分 55
Originally posted by 无奈何 at 2006-12-31 05:38 AM:
a9319751 兄的代码错误较多,发现的错误有丢失了组合、重复、部分计算结果错误等。

namejm 兄提出的这个问题,非常复杂。我一直没有找到好的方法..


这个问题我非常关注,能讲一下思路吗?
其他高手也可以讲一下,
在这里先谢过了。
第9楼 qzwqzw 发表于 2007-01-01 02:31
银牌会员 发帖 636 积分 2,343
此类问题使用递归算法思路要清晰的多

多层循环虽然也可以实现,不过非常难于编写和阅读

下面是一个递归的例子



[ Last edited by qzwqzw on 2006-12-31 at 01:48 PM ]
第10楼 Primalchaos 发表于 2007-01-01 02:52
初级用户 发帖 19 积分 41
佩服!不但实现结果,还能显示到底有多少组组合
第11楼 ccwan 发表于 2007-01-01 03:42
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
几位的代码确实精彩,蕴含着智慧和厚重的知识积累,是我学习的榜样。
第12楼 weapfe 发表于 2007-01-01 04:20
初级用户 发帖 66 积分 144
九楼的代码好像也...
如题.我的test.txt的内容为:



运行结果是:
gn1=1
gn2=2
gn3=3
请按任意键继续. . .
1:1+2=3
2:1+2+3=6
3:1+3=4
4:2+3=5
请按任意键继续. . .
不知是....
第13楼 tghksj 发表于 2007-01-01 04:43
社区乞丐 发帖 90 积分 -49
9楼 qzwqzw

我只能加两分,你的代码拿回家仔细看...

没看出来排除重复组合部分啊?

--------------------
我先慢慢看,
现在第一个pause之前完全理解了.....
---------------------
在 :rec 这转不出来了.............

谁能告诉我那个 %1 是怎么回事吗????
------------------------------------
知道 += 是怎么回事了........原来和C差不多....
------------------------------------
......
ECHO ON了之后
代码对着结果顺下来一遍.....
:rec 还是不大理解....
-------------------------
再看,一定看明白了~学C的时候递归就没学好,这次一定努力一下.......
----------------------
明白了......看懂了!

[ Last edited by tghksj on 2007-1-1 at 11:58 AM ]
第14楼 flamey 发表于 2007-01-01 04:55
初级用户 发帖 74 积分 152
加错分了!!!!
第15楼 tao0610 发表于 2007-01-05 08:49
高级用户 发帖 218 积分 579
几天假期多了不少好东西....

9楼的递归确实是妙,但考虑到效率最好避开FOR的嵌套和CALL递归.

不支持重复数.
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023