對(duì)幾個(gè)數(shù)進(jìn)行全排列,如1,2,3進(jìn)行全排列。可以采用遞歸加循環(huán)的方式.
一次排列的結(jié)束就輸出一次。else中的for循環(huán)代表對(duì)每一層進(jìn)行全排列。
i=0 代表對(duì)第一層(3個(gè)數(shù)排列)進(jìn)行排列 i=1 代表對(duì)第二層 (兩個(gè)數(shù))依次類推。
而交換語(yǔ)句,是每個(gè)數(shù)都和這層的第一個(gè)數(shù)交換,確保所有的數(shù)都能在前面。
package test;
import java.util.Scanner;
public class quanpailie
{
public static void perm(int a,int asum[],int k)
//a數(shù)字的個(gè)數(shù) k+1從哪個(gè)數(shù)開始排列
{
if(k==asum.length-1) //一次排列結(jié)束 輸出 個(gè)數(shù)滿足依次排列
{
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)//不加數(shù)組無(wú)法進(jìn)行交換
{
int temp;
temp=asum[a];
asum[a]=asum[b];
asum[b]=temp;
}
public static void main(String[] args)
{
System.out.println("請(qǐng)輸入你的數(shù)字個(gè)數(shù)");
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
System.out.println("請(qǐng)輸入你的數(shù)字");
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代表數(shù)的個(gè)數(shù) asum 代表這些數(shù) k+1代表從第幾個(gè)開始排序
}
}
全排列
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子...
- 【程序1】 題目:古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔...
- 思路 代碼 改進(jìn)點(diǎn) 五層for循環(huán)是不合理的,超過(guò)3就應(yīng)當(dāng)考慮使用循環(huán) 數(shù)組生成可以優(yōu)化 改進(jìn)后的代碼 結(jié)果:
- 首先考慮一道奧數(shù)題目: □□□ + □□□ = □□□,要將數(shù)字1~9分別填入9個(gè)□中,使得等式成立。例如173+...