日期:2014-05-20  浏览次数:20663 次

面试一个编程题,没做出来帮我看看
现在有int sss [] = {4,5,8,9},写一段程序让程序输出sss这个数组的所有排序!
比如说4,5,8,9
4,5,9,8
4,9,5,8
4,9,8,5等等所有的排序种类,总共应该是24种,这个程序应该怎么编写?谢谢


------解决方案--------------------
最苯的就是定义好四个ABCD,然后。。。。。。。。,我也忘了,嘿嘿。
------解决方案--------------------
怎么没人回贴
------解决方案--------------------
用循环啊
------解决方案--------------------
递归
------解决方案--------------------
Java code

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种,这个程序应该怎么编写?谢谢 
 *