日期:2014-05-20 浏览次数:21117 次
public class Test {
private void queue(int[] sss, int[] ss1) {
if (sss.length > 1) {
int[] yyy = new int[sss.length - 1];
int[] yy1 = new int[ss1.length + 1];
for (int i = 0; i < sss.length; i++) {
int sum;
for (int j = 0; j < yyy.length; j++) {
if (j < i)
sum = j;
else
sum = j + 1;
yyy[j] = sss[sum];
}
for (int k = 0; k < ss1.length; k++) {
yy1[k] = ss1[k];
}
yy1[yy1.length - 1] = sss[i];
queue(yyy, yy1);
}
} else {
for (int s : ss1)
System.out.print(s + " ");
System.out.println(sss[0]);
}
}
public void taxis(int[] sss) {
int[] ss1 = new int[0];
queue(sss, ss1);
}
public static void main(String[] args) {
int[] sss = { 4, 5, 8, 9 };
Test test = new Test();
test.taxis(sss);
}
}
------解决方案--------------------
多重循环排下 没想到其他办法
------解决方案--------------------
用递归最好解决。。。
或者用N(N=sss.length)重循环。。。
------解决方案--------------------
关注....
------解决方案--------------------
我想了一小时还没写出来呢,总考虑不周到,落伍了!!
------解决方案--------------------
void Perm(int list[], int k, int m) {
int i;
if (k == m) {
for (i = 0; i <= m; i++)
cout << a[i] << " ";
cout << endl;
} else
for(i=k; i <= m; i++) {
Swap(list[k], list[i]);
Perm(list, k+1, m);
Swap(list[k], list[i]);
}
}
void Swap(int & a, int &b) {
int t = a;
a = b;
b = t;
}
------解决方案--------------------
推荐看看java版的数据结构
------解决方案--------------------
6楼写的不错,我看了一会 写了一个 没执行出来.
这种算法 最重要是思想. 看你怎么去想了.
------解决方案--------------------
方法一
应用回溯法,每个数的取法都有N个方向(1——N),当取够N个数时,输出一个排列,然后退后一步,取前一个数的下一个方向(即前一个数+1),并且要保证所有数字不能重复。当前数字的所有方向都取完时,继续退一步,一直重复到第一个数为止方法二
应用剔除,列出所有的千位数,
1.剔出出现重复数字的数
2.剔出数字中出现不匹配4,5,9,8
最简单的办法是
System.out.println("4,5,9,8")
.....
写24个
------解决方案--------------------
[code=Java][/code]
/*
* 现在有int sss [] = {4,5,8,9},写一段程序让程序输出sss这个数组的所有排序!
* 比如说4,5,8,9
* 4,5,9,8
* 4,9,5,8
* 4,9,8,5等等所有的排序种类,总共应该是24种,这个程序应该怎么编写?谢谢
*