做几个字符的排列组合

现有几个字符,想得到其排列组合的全部结果。举例,如ABCDEFG7个字符,通过office软件或者编程,得到其排列组合的结果列表,显示如下:ABCDEFGACBDEFGA... 现有几个字符,想得到其排列组合的全部结果。
举例,如ABCDEFG7个字符,通过office软件或者编程,得到其排列组合的结果列表,显示如下:
ABCDEFG
ACBDEFG
ACDBEFG
……

本人对编程完全白痴,请回答者说的简单点,若做出程序,可发至邮箱cherrygirl@qq.com
多谢各位高手!
展开
 我来答
dancegif
2011-07-31 · TA获得超过1206个赞
知道小有建树答主
回答量:878
采纳率:50%
帮助的人:479万
展开全部
声明,该批处理的算法不是我做的,是我在批处理之家搜到的,帖子名“[挑战]批处理输出若干个字符或数字的排列组合”
摘取了其中的一种便于理解的方法,提供给你
一共5040个排列.
修改方法,显示文件扩展名,新建一个文本文档.txt,将代码拷贝进去,保存,修改文本文件的名字为aaa.bat,其它同理

aaa.bat的内容如下:
————————————————————————
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set "str=a b c d e f g"
for %%i in (%str%) do (
set /a n+=1,_%%i=n
)
echo, !str!
for /l %%a in (1,1,10000000) do (
set "last="&set "flag="&set "pos=0"
for %%b in (!str!) do (
set /a pos+=1
if defined last (
set /a n1=_%%b,n2=_!last!
if !n1! gtr !n2! set flag=!last! !pos!
set "last=%%b"
) else (
set "last=%%b"
)
)
if not defined flag call :end %%a
for /f %%b in ("!flag!") do for %%c in (!str!) do if !_%%c! gtr !_%%b! set "th=%%c"
for /f "tokens=1,3" %%b in ("!flag! !th!") do (
set "temp=!str:%%b=#!"
set "temp=!temp:%%c=%%b!"
set "str=!temp:#=%%c!"
)
set "ppos="&set "cut1="&set "cut2="&set "array="
for %%b in (!str!) do (
set /a ppos+=1
for /f "tokens=2" %%c in ("!flag!") do (
if !ppos! geq %%c (
set "cut2=!cut2! %%b"
) else (
set "cut1=!cut1! %%b"
)
)
)
for %%i in (!cut2!) do (
set "array=%%i !array!"
for %%j in (!array!) do (
if %%i gtr %%j (
set "array=!array:%%i=#!"
set "array=!array:%%j=%%i!"
set "array=!array:#=%%j!"
)
)
)
set str=!cut1! !array!
echo,!str!
)
:end
echo,一共%1个排列.
pause>nul&exit——————————————————————————
bbb.bat的内容如下:
——————————————————————————
aaa.bat > c:\result.txt
————————————————————————————

将aaa.bat 和bbb.bat放到c:\ 下,运行 bbb.bat 打开 c:\result.txt文档,结果就是你要的循环组合
至于排列字符,你修改aaa.bat 里面的"abcdefg"即可

记得运行BBB.BAT后,要等待AAA.BAT运行完毕后打开的result。txt的数值才是全部的

满意请采纳!
追问
运行了那个BAT后,我内牛满面啊,没想到有这么白痴的程序适合我这个程序白痴。真是太感谢了,不管是不是你写的。你还细心的给我发了遍邮件,感谢感谢,好人!
govbenben1996
2011-07-31 · TA获得超过7771个赞
知道大有可为答主
回答量:5544
采纳率:25%
帮助的人:1965万
展开全部
package baidu.testTwo;

public class Sort {
private static char[] NUM = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'Y', 'Z' };// 所有的字母数

public char[] randNum(int num) {// 随机选取num个数
char[] s = new char[num];// 定就num个长度的字符数组
int i = 0;// 计算循环数
int n = 0;// 控制循环
while (i < num) {
char c = NUM[(int) (Math.random() * NUM.length)];// 随机出一个字符,将其赋给c
for (int j = 0; j < s.length; j++) {// 这个循环是除去重的字符
if (s[j] == c)
{// 如果有重复的则终止循环
n = 1;// 将n=1
break;// 终止for循环
}
}

if (n == 1) { // 如果n==1,则进入下一个while循环
n = 0; // 将n还原 n=0;
continue; // 进入下一循环
} else { // 如果n不等于1,刚将字符c赋给s[i]
n = 0; // 将n还原 n=0;
s[i] = c; // 将字符c赋给s[i]
i++;
}

}

return s;// 返回含有num个不重复的字符数组
}

public void sortNum(int num) {//排列出所有的可能
char[] s = randNum(num).clone();//clone一个randNum(num);
System.out.println("***" + s.length);//打印s的长度
for (int i = 0; i < s.length; i++) {//排列循环

for (int j = 0; j < s.length - 1; j++) {
char t;
t = s[j];
s[j] = s[j + 1];
s[j + 1] = t;
for (int m = 0; m < s.length; m++) {//打印排列
System.out.print(s[m]);
}
System.out.println();
}

}
}

public static void main(String[] a) {
Sort s = new Sort();
s.sortNum(5);
}
}
追问
不好意思,我是程序白痴,给了代码都不知道怎么实现。所以,感谢你的回答了,留给有点基础的人学习吧:)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式