用java 编程从26个字母中取出8个并排列打印所有情况

如题所述

//如果你要的是8个字母不重复的话,就是我的答案。

public class WordTest {

private static final char[] words = "abcdefghijklmnopqrstuvwxyz".toCharArray();

public static void main(String[] args) {
int[] temp = new int[] { 0, 1, 2, 3, 4, 5, 6, 7 };// 手动初始化第一组
print(temp);
while (findNext(temp)) {
print(temp);
}
}

private static boolean findNext(int[] temp) {
for (int index = 7; index >= 0; index--) {// 先试图从后面开始找,所以索引由大到小
if (findNextAtIndex(temp, index)) {
return true;
}
}
return false;
}

private static boolean findNextAtIndex(int[] temp, int findIndex) {
for (int findChar = temp[findIndex] + 1; findChar < 26; findChar++) {// findChar就是找到的下一个
if (testFindChar(temp, findIndex, findChar)) {// 检查findChar是否和前面的重复
temp[findIndex] = findChar;// 测试通过
if (findIndex == 7) {
return true;
}
temp[findIndex + 1] = -1;// 如果这不是最后面,那么重置后面一位,开始查找后一个
return findNextAtIndex(temp, findIndex + 1);
}
}
return false;
}

private static boolean testFindChar(int[] temp, int findIndex, int findChar) {
for (int index = 0; index < findIndex; index++) {
if (temp[index] == findChar) {
return false;
}
}
return true;
}

private static void print(int[] temp) {
for (int index : temp) {
System.out.print(words[index]);
}
System.out.println();
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-06
告诉你运行得到所有结果需要近1分钟 ,把结果写入文件的话,文件大小接近15M。
代码发出来有兴趣你可以试下
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class Dfdfewf {
static FileWriter fw=null;
public static void main(String[] args) throws IOException {
String[] s={"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"};
ArrayList<String> list = new ArrayList<String>();
for(int i=0;i<s.length;i++){
list.add(s[i]);
}
fw=new FileWriter("AAA.txt");
te(18,list,0);
fw.flush();
fw.close();

}
public static void te(int nn,ArrayList<String> list,int ii) throws IOException{
if(nn>0){
for(int i=ii;i<list.size();i++){
ArrayList<String> li=(ArrayList<String>) list.clone();
li.remove(i);
if(nn==1){
for(int m=0;m<li.size();m++){
// System.out.print(li.get(m));
fw.write(li.get(m));
}
// System.out.println("");
fw.write("\r\n");
}
te(nn-1,li,i);
}
}else{
return;
}
}
}本回答被网友采纳
第2个回答  2013-02-06
根据我对题目的理解,一楼的答案不对。
我的理解就是排列组合,从26个字母中取出8个,有多少种可能,
26*25*24*23*22*21*20*19 = 62990928000
这么大的数,怎么可能打印所有情况?
一楼的是26个字母中,取连续8个字母,并且允许首尾相连,即环。

java实现:从26个字目中任取5个字母,排列组合出所有的可能,打印出来
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++) {...

java编程:用26个英文字母随即产生1000个英文大写字母,选出元音字母的个...
public class Test { public static void main(String[] args) { String[] arr = new String[]{"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"};List<String> list=new ArrayList<...

...个字母的输出,如输入a输出b,输入Z输出A。 用java怎么编写出来。求大...
import java.util.*;class Test{ public static void main(String[] args){ Scanner x=new Scanner(System.in);\/\/构造一个Scanner对象,其传入参数为System.in char a=x.nextchar();\/\/读取一个int数值if(a>='a'&&a<'z') System.out.println("下一个字母为为"+(a+1)); else if(a=='z') Syst...

java 中的 方法 总是调来调去的 求高人发题 专练习调方法的练习题 下下...
8.创建一个仅有一个非缺省构造器的基类,并创建一个带有缺省构造器和非缺省构造器的导出类。在导出类的构造器中调用基类的构造器。9.(1)创建一个Root类,令其含有名为Component1、Component2、Component3的类各一个实例(这些也由你写)。从Root中派生一个类Stem,也含有上述各“组成部分”。所有的类都应带有打印...

编写一个java程序,完成以下功能: 1) 声名为s的string对象,并使它的内容...
System.out.println("第一个单词:"+s.trim().substring(0, s.trim().indexOf(" ")));System.out.println("将'C'替换为'B':"+s.replace('C', 'B'));System.out.println("截取Me:"+s.substring(6,8));System.out.println("打印s中的各个单词:");str=s.trim();while(str....

为什么代码要用英文,而不用中文?
英语的流通性更好,英语几乎在全世界范围内流通,英文的二十六个字母组成所有单词,而且英语有固定的语法,不像中文表达同一个意思有千百种说法,用中文在电脑上跟其他国家的人交流确实没用英文方便。如果要用中文编程,需要在原有的硬件基础上将中文变成英文,再转换成英文编程,这将大大增长代码运行的时间...

java 编程题集
1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21...【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。【程序3】题目:打印出所有的"水仙花数",所谓"水仙花数"...

java中String 和StringBuffer有什么区别
将26个英文字母重复加了5000次,Java代码 1.String tempstr = "abcdefghijklmnopqrstuvwxyz";2.int times = 5000;3.long lstart1 = System.currentTimeMillis();4.String str = "";5.for (int i = 0; i < times; i++) { 6. str += tempstr;7.} 8.long lend1 = System.current...

相似回答