找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: 舒待子

[数值计算] [挑战]批处理输出若干个字符或数字的排列组合

[复制链接]
发表于 2011-5-22 12:33:47 | 显示全部楼层
29# plp626


嗯,本质上确实是一样的...原先没注意看52兄的第三个代码,但是大概扫了一眼留下印象了吧,后来自己的思路也是这个路线的,汗
发表于 2011-5-22 12:39:54 | 显示全部楼层
30# powerbat


我不知道有没理解对,老兄似乎是说全部列举出来再排除重复,但是这样效率太低了,假设有7个项,每个项都能多次使用而且不排除重复的所有排列=7的7次方=823543,但是题目所要求的真正的组合=!7=5040,也就是说,后者比前者少计算了八十多万次,这是不可忍受的。
所以粗看了下大家的代码,大部分是用批处理实现!7的计算方式,以节省用时
发表于 2011-5-22 12:58:38 | 显示全部楼层
列举出来的组合数完全没重复。
排除一部分组合只是为了满足那个题目的要求
发表于 2011-5-22 13:14:22 | 显示全部楼层
33# powerbat


噢,那是我理解问题了呵呵
发表于 2019-3-17 10:04:46 | 显示全部楼层
各位老师的代码都好牛!但26个字母里选3个不重复排列怎么整呢,修改哪个都没成功
发表于 2019-3-17 12:47:55 | 显示全部楼层
本帖最后由 523066680 于 2019-3-17 12:58 编辑

回复 35# ahighhand

26选3
组合
  1. @echo off
  2. call :func "abcdefghijklmnopqrstuvwxyz" "" 0
  3. pause &exit

  4. :func
  5.     setlocal
  6.     set /a v=%3
  7.     if %v% equ 3 (echo %~2 &goto :eof)
  8.     if %1  == "" (goto :eof)
  9.     set strnow=%~1
  10.     call :func "%strnow:~1%" "%~2%strnow:~0,1%" %v%+1
  11.     call :func "%strnow:~1%" "%~2" %v%
  12.     endlocal
复制代码
排列
  1. @echo off &setlocal enabledelayedexpansion
  2. set alphabet=abcdefghijklmnopqrstuvwxyz
  3. for /l %%a in (0,1,25) do set eles=!eles! !alphabet:~%%a,1!
  4. call :func "%eles%" "" 0
  5. pause &exit

  6. :func
  7.     setlocal
  8.     set /a v=%3
  9.     if %v% equ 3 ( echo %~2 &goto :eof)
  10.     set eles=%~1
  11.     for %%a in ( %eles% ) do call :func "!eles:%%a=!" "%~2%%a" %v%+1
  12.     endlocal
复制代码
发表于 2019-3-17 22:20:59 | 显示全部楼层
回复 36# 523066680


    似曾相识的感觉,happy好像也出过这个题,当时的我(菜鸡)还解不出来
发表于 2019-3-17 23:12:43 | 显示全部楼层
本帖最后由 523066680 于 2019-3-17 23:26 编辑

回复 37# 老刘1号

    那个帖子,我转发了一段迭代解法(摘自《高阶Perl》),若想要第N个结果、或者想要从第N个排列开始排,可以直接算,而不需要从头开始。
不过没什么人留意
http://www.bathome.net/redirect. ... 3749&pid=198745
http://www.code-by.org/viewtopic.php?p=814#p814

如果做多线程并行,这种迭代法就很好用,8核的CPU,8线程分别从不同的起点开始迭代。
如果是跑GPU,并发量就更大了,若是简单的加密应该可以利用这种方法,大量并发加速碰撞。
发表于 2019-3-18 23:59:02 | 显示全部楼层
回复  ahighhand

26选3
组合排列
523066680 发表于 2019-3-17 12:47


谢谢版主!如果想直接输出到list.txt怎么修改更好些?

评分

参与人数 1PB +1 收起 理由
523066680 + 1 自己摸索

查看全部评分

发表于 2019-3-19 09:16:44 | 显示全部楼层
回复 39# ahighhand


call :func "abcdefghijklmnopqrstuvwxyz" "" 0 > list.txt
试试这样可以吗

评分

参与人数 1PB +6 收起 理由
523066680 + 6 批处理太难,学不来,学不来

查看全部评分

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:11 , Processed in 0.019357 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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