黑马程序员技术交流社区
标题:
练习:打印 1、2、3、4的组合,不能以4开头,1、3不相邻
[打印本页]
作者:
fmi110
时间:
2015-9-12 20:17
标题:
练习:打印 1、2、3、4的组合,不能以4开头,1、3不相邻
要求:数字只能出现一次
public class Test6 {
/**
* 用1、2、3、4这四个数字,用java写一个main函数,打印出所有不同的排列,如:1234、1243等,
* 要求:"4"不能在第一位,"1"与"3"不能相连。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//正则表达式,代表不以4开头的字符串
String regex1 = "^[^4].*$";
//代表1和3相连的字符串
String regex2 = ".*[1][3].*$";
String regex3 = ".*[3][1].*$";
//建立存储组合的字符
StringBuilder sb = new StringBuilder("");
String str = null;
int count = 0;//统计个数
for(int i = 1;i < 5;i++){
for (int j = 1 ; j < 5; j++) {
for(int k = 1; k < 5 ; k++){
for(int h = 1 ; h < 5 ; h++){
sb.append(i).append(j).append(k).append(h);
str = sb.toString();
if(str.matches(regex1))//不以4开头
{
if(!(str.matches(regex2)||str.matches(regex3))){//1和3不相连
if(single(str)){ //过滤,只要数字不重复的组合
count++;
System.out.println(str+"..."+count);
}
}
}
sb.delete(0,sb.length());
}
}
}
}
}
private static boolean single(String str) { //去除相同数字
// TODO Auto-generated method stub
boolean flag = true;
for(int i = 1;i < 5;i++){
int count = 0;
int offset = 0;
while((offset = str.indexOf(String.valueOf(i),offset))!=-1){
offset += 1;
count++;
if(count > 1){
flag = false;
break;
}
}
}
return flag;
}
}
复制代码
作者:
fmi110
时间:
2015-9-12 20:19
运行结果
1234...1
1243...2
1423...3
1432...4
2143...5
2341...6
3214...7
3241...8
3412...9
3421...10
复制代码
作者:
zrc203
时间:
2015-9-12 20:38
不错,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2