import java.util.Enumeration; public class CipherTest implements Enumeration { private int N; private int c[], k; private Object[] objs; public CipherTest(Object[] items) { N = items.length; c = new int[N + 1]; for (int i = 0; i <= N; i++) c[i] = i; objs = items; k = 1; } public boolean hasMoreElements() { return (k < N); } public Object nextElement() { int i = 0; if ((k & 1) != 0) i = c[k]; Object tmp = objs[k]; objs[k] = objs[i]; objs[i] = tmp; k = 1; while (c[k] == 0) c[k] = k++; c[k]--; return objs; } public static void main(String[] args) { // String[] strs = { "1", "2", "3", "4" }; Integer[] nums = new Integer[6]; for (int i = 0; i < nums.length; i++) nums[i] = i + 1; System.out.println("N=" + nums.length); Enumeration e = new CipherTest(nums); int count = 0; while (e.hasMoreElements()) { Object[] a = (Object[]) e.nextElement(); if (((Integer) a[0]).intValue() != 4) continue; boolean isContinue = false; for (int i = 0; i < a.length - 1; i++) { if ((((Integer) a[i]).intValue() == 2 && ((Integer) a[i + 1]) .intValue() == 3) || (((Integer) a[i]).intValue() == 3 && ((Integer) a[i + 1]) .intValue() == 2)) { isContinue = true; break; } } if (isContinue) continue; System.out.print("{" + a[0]); for (int i = 1; i < a.length; i++) System.out.print(", " + a[i]); System.out.println("}"); count++; } System.out.println("count=" + count); } }