本帖最后由 wankoilz 于 2011-5-17 14:33 编辑
楼主能不能说说大致思路,看代码有点累
我来一个比较笨的方法:
将这15个数字分成两组,小于等于51的10个数字为一组,大于51的5个数字为一组。
求出前一组10个数字的所有组合的和,找出符合102<sum<105 组合。
后一组的5个数中最小的也是52,所以任何一个符合102<sum<105 的组合都只可能有该分组中的一个数字。
于是把这5个数分别和“前10个数字的所有组合(上一步已保存)”进行组合,找出符合102<sum<105的就行了。
这方法已经近似穷举了,幸好大于等于52的数字有5个,而使得前面只需要找出10个数字的组合。要如果直接求15个数字的所有组合的话就不知要等到猴年马月了!- @echo off&setlocal enabledelayedexpansion
- set str=8, 13, 2, 37, 19, 11, 7, 22, 38
- set _51=ok
- for %%a in (%str%) do (
- for /f "delims=_=" %%b in ('set _') do (
- set/a sum=%%b+%%a
- if !sum! gtr 102 if !sum! lss 105 echo %%b+%%a=!sum!
- if !sum! lss 104 set _%%b+%%a=ok
- )
- set _%%a=ok
- )
- rem 将后5个数字分别与前面所有组合相组合,并求和判断
- for %%a in (52, 61,62, 79, 85) do (
- for /f "delims=_=" %%b in ('set _') do (
- set/a sum=%%b+%%a
- if !sum! gtr 102 if !sum! lss 105 echo %%b+%%a=!sum!
- ))
- pause
复制代码
|