[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理如何统计三个在指定范围内的数字的和为指定值的组合有多少种?

本帖最后由 pcl_test 于 2016-7-31 22:43 编辑

牵扯到call语句或goto语句在for 语句中的应用,这个我不是很明白,所以一直没有正确计算出,是要再加点什么吗?
  1. @echo off &setlocal enabledelayedexpansion
  2. set num3=0
  3. set num4=0
  4. set num5=0
  5. set num6=0
  6. set num7=0
  7. set num8=0
  8. set num9=0
  9. set num10=0
  10. set num11=0
  11. set num12=0
  12. set num13=0
  13. set num14=0
  14. set num15=0
  15. set sum=0
  16. for /l %%a in (1 1 5) do (
  17.    for /l %%b in (1 1 5) do (
  18.       for /l %%c in (1 1 5) do (
  19. set /a sum=%%a+%%b+%%c
  20. call :!sum!
  21.   )
  22. )
  23. )
  24. echo 3的组合有!num3!种
  25. echo 4的组合有!num4!种
  26. echo 5的组合有!num5!种
  27. echo 6的组合有!num6!种
  28. echo 7的组合有!num7!种
  29. echo 8的组合有!num8!种
  30. echo 3的组合有!num9!种
  31. echo 10的组合有!num10!种
  32. echo 11的组合有!num11!种
  33. echo 12的组合有!num12!种
  34. echo 13的组合有!num13!种
  35. echo 14的组合有!num14!种
  36. echo 15的组合有!num15!种
  37. pause>nul
  38. :3
  39. set /a num3+=1
  40. :4
  41. set /a num4+=1
  42. :5
  43. set /a num5+=1
  44. :6
  45. set /a num6+=1
  46. :7
  47. set /a num7+=1
  48. :8
  49. set /a num8+=1
  50. :9
  51. set /a num9+=1
  52. :10
  53. set /a num10+=1
  54. :11
  55. set /a num11+=1
  56. :12
  57. set /a num12+=1
  58. :13
  59. set /a num13+=1
  60. :14
  61. set /a num14+=1
  62. :15
  63. set /a num15+=1
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

你是说  有3个数,范围是1-5,求和为N的情况有多少种组合?
Press Any Key To Continue...

TOP

不敢确定,这样算对不对?
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (3 1 15) do set /a s%%a=0
  3. set /a num=0
  4. for /l %%a in (1 1 5) do (
  5.    for /l %%b in (%%a 1 5) do (
  6.       for /l %%c in (%%b 1 5) do (
  7.          set /a num=%%a+%%b+%%c
  8.          set /a s!num!+=1
  9.       )
  10.    )
  11. )
  12. for /l %%a in (3 1 15) do echo,%%a的组合有!s%%a!种
  13. pause>nul
复制代码

TOP

  1. @echo off &setlocal enabledelayedexpansion
  2. for /l %%i in (3,1,15) do (
  3.     set /a N[%%i]=0
  4. )
  5. set /a sum=0
  6. for /l %%a in (1 1 5) do (
  7.    for /l %%b in (1 1 5) do (
  8.       for /l %%c in (1 1 5) do (
  9.           set /a sum=%%a+%%b+%%c
  10.           set /a N[!sum!]+=1
  11.   )
  12. )
  13. )
  14. for /l %%i in (3,1,15) do (
  15.     echo 3个[1-5]范围内的数字和为%%i 的情况有:!N[%%i]! 种
  16. )
  17. pause
复制代码
1

评分人数

    • xpw: 够简捷!技术 + 1
Press Any Key To Continue...

TOP

回复 1# xpw


    错误在于
:3
set /a num3+=1

:4
set /a num4+=1

:5
set /a num5+=1

每个环节之间没有用goto :eof
如果你调用了:3 , 那么从:3到:15的所有公式都+1。
这些数值被重复计算了。
Press Any Key To Continue...

TOP

回复 4# PakTC


    这是排列个数吧?

TOP

回复 6# apang


    没去注意,直接用楼主的改的。
只是告诉楼主重复句子多了。
还有就是没有goto :eof
Press Any Key To Continue...

TOP

本帖最后由 PakTC 于 2013-7-29 22:15 编辑

楼主如果用Call可以这样

            [此处省略若干代码]
          set /a sum=%%a+%%b+%%c
          call :func !sum!
            [此处省略若干代码]

:func
set /a num%1+=1
Press Any Key To Continue...

TOP

回复 3# apang

把for 嵌套改成:
for /l %%a in (1 1 5) do (
    for /l %%b in (1 1 5)do (
        for /l %%c in(1 1 5)do (...)
计算出来的结果就对了

TOP

本帖最后由 xpw 于 2013-7-29 22:46 编辑
PakTC 发表于 2013-7-29 21:58

3个[1-5]范围内的数字和为3 的情况有:1 种
3个[1-5]范围内的数字和为4 的情况有:3 种
3个[1-5]范围内的数字和为5 的情况有:6 种
3个[1-5]范围内的数字和为6 的情况有:10 种
3个[1-5]范围内的数字和为7 的情况有:15 种
3个[1-5]范围内的数字和为8 的情况有:18 种
3个[1-5]范围内的数字和为9 的情况有:19 种
3个[1-5]范围内的数字和为10 的情况有:18 种
3个[1-5]范围内的数字和为11 的情况有:15 种
3个[1-5]范围内的数字和为12 的情况有:10 种
3个[1-5]范围内的数字和为13 的情况有:6 种
3个[1-5]范围内的数字和为14 的情况有:3 种
3个[1-5]范围内的数字和为15 的情况有:1 种

    就是要这个计算结果!

TOP

楼主如果用Call可以这样

            [此处省略若干代码]
          set /a sum=%%a+%%b+%%c
         ...
PakTC 发表于 2013-7-29 22:14



    看来我思路还不够简捷,没想到可以这样做

TOP

本帖最后由 523066680 于 2013-7-29 22:58 编辑

这让我想起比赛 第3题
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set au=AAAAA
  4. set bu=BBBBB
  5. set cu=CCCCC
  6. set du=DDDDD
  7. set /a n=0
  8. for /l %%a in (1 1 5) do (
  9.    for /l %%b in (1 1 5) do (
  10.       for /l %%c in (1 1 5) do (
  11.          for /l %%d in (1 1 5) do (
  12.             set /a sum=%%a+%%b+%%c+%%d
  13.             if !sum! equ 8 (
  14.                set /a n+=1
  15.                echo %%a%%b%%c%%d !au:~0,%%a!!bu:~0,%%b!!cu:~0,%%c!!du:~0,%%d!
  16.             )
  17.          )
  18.       )
  19.    )
  20. )
  21. echo 有%n%个结果
  22. pause
复制代码
有ABCD四组元素,随机组成8位字符,每组至少出现一次。
那么不同次数全列出来,有多少种形式呢?(未排列的情况下)

1115 ABCDDDDD
1124 ABCCDDDD
1133 ABCCCDDD
1142 ABCCCCDD
1151 ABCCCCCD
1214 ABBCDDDD
1223 ABBCCDDD
1232 ABBCCCDD
1241 ABBCCCCD
1313 ABBBCDDD
1322 ABBBCCDD
1331 ABBBCCCD
1412 ABBBBCDD
1421 ABBBBCCD
1511 ABBBBBCD
2114 AABCDDDD
2123 AABCCDDD
2132 AABCCCDD
2141 AABCCCCD
2213 AABBCDDD
2222 AABBCCDD
2231 AABBCCCD
2312 AABBBCDD
2321 AABBBCCD
2411 AABBBBCD
3113 AAABCDDD
3122 AAABCCDD
3131 AAABCCCD
3212 AAABBCDD
3221 AAABBCCD
3311 AAABBBCD
4112 AAAABCDD
4121 AAAABCCD
4211 AAAABBCD
5111 AAAAABCD
有35个结果

TOP

哦,是算排列啊,楼主应该改下标题

TOP

返回列表