A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kaka小明 中级黑马   /  2013-6-22 15:43  /  1271 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 孙百鑫 于 2013-6-27 07:01 编辑

从数字1-9中任意选取n(1-9之间,如4)个,做全排列组合,求所有组合的打印结果。这个如何实现?求高手解答。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
蛮有意思 晚上回去试试。
回复 使用道具 举报
我以前写过的代码,类似于这个希望对你有用,只需稍加改动一下。
java实现:从8个数中任取5个数,打印出所有组合结果。
for循环部分应该是用方法封装的,但是有些繁琐,就没去写了,
public static void main(String[] args) {   
int [] ran = new int[8];   
  for (int i = 0; i < ran.length; i++)
{      ran[i]=i+1;  }
Random random = new Random();
int loop = 5;
int[] save = new int[5];
int rc = 0;
while (loop > 0)
{   //随即抽取数组下标   int index = random.nextInt(ran.length);  
int r = ran[index];
   save[rc++] = r;   
   ran = remove(ran, r);   loop--;  }    //随即选的5个数
for (int i = 0; i < save.length; i++)
{   System.out.print(save[i]+",");  }
System.out.println("");
int count = 5*4*3*2;
String [] num = new String[count];  
  label:   for (int i = 0; i < save.length; i++)
{   int [] a =remove(save, save[i]);   
for (int j = 0; j < a.length; j++)
{    int [] b =remove(a, a[j]);   
for (int k = 0; k < b.length; k++)
{     int [] c =remove(b, b[k]);  
   for (int m = 0; m < c.length; m++)
{      int [] d =remove(c, c[m]);     
for (int n = 0; n < d.length; n++)
{       num[--count] = save[i]+""+a[j]+       ""+b[k]+""+c[m]+""+d[n];      
if (count==0)
{        break;        }      }     }    }   }  }
for (int i = 0; i < num.length; i++)
{   if (!num[i].equals("")) {    System.out.println(num[i]);   }     }     }    //去除已经产生的数,赋给新数组
static int[] remove (int[] n,int r){  int []m = new int[n.length-1];  
for (int i = 0, k = 0; i < n.length; i++, k++) {   if (n[i] != r) {    m[k] = n[i];   } else {    k--;   }  }  return m; }

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
007诸葛亮 发表于 2013-6-22 16:41
我以前写过的代码,类似于这个希望对你有用,只需稍加改动一下。
java实现:从8个数中任取5个数,打印出所 ...

多谢啦,从网上找了个递归实现的,简洁明了。
http://blog.csdn.net/sunyujia/article/details/4124011
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马