对几个数进行全排列,如1,2,3进行全排列。可以采用递归加循环的方式.
一次排列的结束就输出一次。else中的for循环代表对每一层进行全排列。
i=0 代表对第一层(3个数排列)进行排列 i=1 代表对第二层 (两个数)依次类推。
而交换语句,是每个数都和这层的第一个数交换,确保所有的数都能在前面。
package test;
import java.util.Scanner;
public class quanpailie
{
public static void perm(int a,int asum[],int k)
//a数字的个数 k+1从哪个数开始排列
{
if(k==asum.length-1) //一次排列结束 输出 个数满足依次排列
{
for(int i=0;i<asum.length;i++)
System.out.print(asum[i]+"\t");
System.out.println();
}
else
{
for(int i=k;i<a;i++)//i值非常重要
{
swap(asum,k,i);
perm(a,asum,k+1);
swap(asum,k,i);
}
}
}
public static void swap(int asum[],int a,int b)//不加数组无法进行交换
{
int temp;
temp=asum[a];
asum[a]=asum[b];
asum[b]=temp;
}
public static void main(String[] args)
{
System.out.println("请输入你的数字个数");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
System.out.println("请输入你的数字");
int asum[]=new int[a];
for(int i=0;i<asum.length;i++)
{
asum[i]=sc.nextInt();
}
int k=0;
perm(a,asum,k);
//a代表数的个数 asum 代表这些数 k+1代表从第几个开始排序
}
}
全排列
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 首先考虑一道奥数题目: □□□ + □□□ = □□□,要将数字1~9分别填入9个□中,使得等式成立。例如173+...