求高手指点JAVA数组排列题目 本帖最后由 cczcseiya423 于 2011-05-23 15:34:29 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 意思是说,假如A坐在一个位置上(A属于一年级),那么A的两边至少要有一个不是一年级的同学。 一般排列组合的问题都可以用模拟进制的算法来实现,本题可以模拟三进制(0代表1年级,1代表2年级,2代表3年级),然后从000111222开始累加,达到222111000结束,从中找出符合条件的数据,打印for exampleimport java.util.*;public class Test { public static void main(String[] args) { int[] a = new int[9]; for (int i=0; i<9; i++) { if (i < 3) {a[i] = 0;} else if (i < 6) {a[i] = 1;} else {a[i] = 2;} } while (true) { String s = Arrays.toString(a); //这里为了方便转成字符串操作,性能相对有所下降 String ss = s.replaceAll(", ", ""); if (ss.compareTo("[222111000]") >= 0) {break;} //达到最大时退出 if (ss.contains("000") || ss.contains("111") || ss.contains("222")) { //同年级相邻排除 } else if ((ss.replaceAll("0", "").length() != ss.length()-3) || (ss.replaceAll("1", "").length() != ss.length()-3) || (ss.replaceAll("2", "").length() != ss.length()-3) ) { //各年级人数不是3人的排除 } else if (a[0] == a[1] || a[7] == a[8]) { //首尾连续2人相同的排除(如果是圆形桌,没有这个条件) } else { System.out.println(s); //非上述的情况,即符合条件的情况打印 } a[a.length-1]++; //这里模拟进制,末位+1,满3的往前进位 for (int i=a.length-1; i>0; i--) { if (a[i] == 3) { a[i] = 0; a[i-1]++; } } if (a[0] == 3) {break;} //这个条件只是避免进位溢出 } }} 我想弱弱的问一句 Arrays.toString(a); 是个什么方法啊?在jdk里面的哪个类里边儿啊? jdk 1.5以后java.util.Arrays这个类里自己看下javadoc吧static String toString(int[] a) Returns a string representation of the contents of the specified array. 新手问个问题 为什么java里的main在类里啊? 关生局部final 字段的生命周期问题 java小程序,判断输入的年份是否合法,动态输入,高手进 enumeration排序 Java 中如何实现文件分割? 关于Java查询DB2数据库数据时出的问题???? 请问:private DialogWindow parent;错了吗? 关于applet的一个问题! java中的window frame panel三者是什么关系.求教 java 小问题 关于时间格式化问题
意思是说,假如A坐在一个位置上(A属于一年级),那么A的两边至少要有一个不是一年级的同学。
for example
import java.util.*;
public class Test {
public static void main(String[] args) {
int[] a = new int[9];
for (int i=0; i<9; i++) {
if (i < 3) {a[i] = 0;}
else if (i < 6) {a[i] = 1;}
else {a[i] = 2;}
}
while (true) {
String s = Arrays.toString(a); //这里为了方便转成字符串操作,性能相对有所下降
String ss = s.replaceAll(", ", "");
if (ss.compareTo("[222111000]") >= 0) {break;} //达到最大时退出
if (ss.contains("000") || ss.contains("111") || ss.contains("222")) {
//同年级相邻排除
} else if ((ss.replaceAll("0", "").length() != ss.length()-3) ||
(ss.replaceAll("1", "").length() != ss.length()-3) ||
(ss.replaceAll("2", "").length() != ss.length()-3) ) {
//各年级人数不是3人的排除
} else if (a[0] == a[1] || a[7] == a[8]) {
//首尾连续2人相同的排除(如果是圆形桌,没有这个条件)
} else {
System.out.println(s); //非上述的情况,即符合条件的情况打印
}
a[a.length-1]++; //这里模拟进制,末位+1,满3的往前进位
for (int i=a.length-1; i>0; i--) {
if (a[i] == 3) {
a[i] = 0;
a[i-1]++;
}
}
if (a[0] == 3) {break;} //这个条件只是避免进位溢出
}
}
}
java.util.Arrays这个类里
自己看下javadoc吧
static String toString(int[] a)
Returns a string representation of the contents of the specified array.