日期:2014-05-20 浏览次数:20795 次
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种,这个程序应该怎么编写?谢谢
*