java中排列组合问题

请输出由2,4,4,6,8,9组成的所有6不在千位切8,9不相临的的六位数,并统计个数注意:有两个4... 请输出由2,4,4,6,8,9组成的所有6不在千位切8,9不相临的的六位数,并统计个数
注意:有两个4
展开
 我来答
百度网友320c33d
2007-11-17
知道答主
回答量:7
采纳率:0%
帮助的人:6万
展开全部
这个程序希望能帮到你。

我的output
.....(太多了,省略)
442869
442869
424869
244869
424869
244869
Total weird numbers: 396
............permu time: 13 milliseconds..........

程序代码如下:
package test;

import java.util.Date;

/**
*
* @author liang.rao@gmail.com
* @date 16.Nov.2007
* @why zhidao.baidu.com : question/39707738.html
*
*/

public class WeirdNumbers {

public static int counter = 0;

// print N! permutation of the elements of array a (not in order)
public static void perm2(String s) {
int N = s.length();
char[] a = new char[N];
for (int i = 0; i < N; i++)
a[i] = s.charAt(i);
perm2(a, N);
}

private static void perm2(char[] a, int n) {
if (n == 1 && numberControl(a)) {
System.out.println(a);
counter++;
return;
}
for (int i = 0; i < n; i++) {
swap(a, i, n - 1);
perm2(a, n - 1);
swap(a, i, n - 1);
}
}

// swap the characters at indices i and j
private static void swap(char[] a, int i, int j) {
char c;
c = a[i];
a[i] = a[j];
a[j] = c;
}

private static boolean numberControl(char[] a) {
boolean allOk = true;
if (a[1]=='6')
allOk = false;
for(int i = 0; i < a.length-1; i++ ) {
if((a[i]=='8' && a[i+1]=='9')||(a[i]=='9' && a[i+1]=='8'))
allOk = false;
}
return allOk;
}

public static void main(String[] args) {

String elements = "244689";

Date dt3 = new Date();
perm2(elements);
Date dt4 = new Date();
System.out.println("Total weird numbers: " + counter);
System.out.println("............permu time: " + (dt4.getTime() - dt3.getTime())
+ " milliseconds..........");
}
}

要得到完整的output还有两个办法一是把它写入
new PrintStream(new FileOutputStream("output.txt")); 对象里面

或者用下面这个办法进行排版
if (n == 1 && numberControl(a)) {
System.out.print(a);
System.out.print(" ");
if (counter % 10 == 9)
System.out.println("");
counter++;
return;
}
百度网友e1b1439
2007-11-16 · TA获得超过409个赞
知道小有建树答主
回答量:1064
采纳率:0%
帮助的人:667万
展开全部
我也在等这个答案,怪我数字不好.有答案了给我发个吧:junqing124@126.com
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式