1. استخدم طريقة الحالة الثنائية للعثور على التباديل والمجموعات. هذه الطريقة سهلة الفهم نسبيًا، لكن كفاءة تشغيلها ليست عالية. يمكن استخدام التباديل والمجموعات الصغيرة.
انسخ رمز الكود كما يلي:
استيراد java.util.Arrays؛
// استخدم الخوارزمية الثنائية لتنفيذ الترتيب الكامل
//العد1:170187
//العد2:291656
اختبار الطبقة العامة {
public static void main(String[] args) {
بداية طويلة=System.currentTimeMillis();
count2();
long end=System.currentTimeMillis();
System.out.println(end-start);
}
عدد الفراغات الثابتة الخاصة2(){
int[] num=new int []{1,2,3,4,5,6,7,8,9};
for(int i=1;i<Math.pow(9, 9);i++){
String str=Integer.toString(i,9);
int sz=str. length();
ل(int j=0;j<9-sz;j++){
str = "0"+str؛
}
char[] temp=str.toCharArray();
Arrays.sort(temp);
String gl=new String(temp);
إذا(!gl.equals("012345678")){
يكمل؛
}
نتيجة السلسلة = ""؛
for(int m=0;m<str.length();m++){
result+=num[Integer.parseInt(str.charAt(m)+"")];
}
System.out.println(result);
}
}
عدد الفراغات العامة الثابتة 1 () {
int[] num=new int []{1,2,3,4,5,6,7,8,9};
int[] ss=new int []{0,1,2,3,4,5,6,7,8};
int[] temp=new int[9];
بينما(درجة الحرارة[0]<9){
درجة الحرارة[temp.length-1]++;
for(int i=temp.length-1;i>0;i--){
إذا (درجة الحرارة [i] == 9) {
درجة الحرارة[i]=0;
درجة الحرارة[i-1]++;
}
}
int []tt=temp.clone();
Arrays.sort(tt);
إذا(!Arrays.equals(tt,ss)){
يكمل؛
}
نتيجة السلسلة = ""؛
for(int i=0;i<num.length;i++){
result+=num[temp[i]];
}
System.out.println(result);
}
}
}
2. استخدم التفكير العودي للعثور على التباديل والتركيبات، الأمر الذي يتطلب قدرًا كبيرًا من التعليمات البرمجية.
انسخ رمز الكود كما يلي:
ممارسة الحزمة؛
import java.util.ArrayList;
import java.util.List;
اختبار الطبقة العامة 1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO طريقة تم إنشاؤها تلقائيًا stub
Object[] tmp={1,2,3,4,5,6};
// ArrayList<Object[]> rs=RandomC(tmp);
ArrayList<Object[]> rs=cmn(tmp,3);
ل(int i=0;i<rs.size();i++)
{
// System.out.print(i+"=");
for(int j=0;j<rs.get(i).length;j++)
{
System.out.print(rs.get(i)[j]+"،");
}
System.out.println();
}
}
// ابحث عن أي مجموعة من المصفوفة
ArrayList ثابت <Object[]> RandomC(Object[] المصدر)
{
ArrayList<Object[]> result=new ArrayList<Object[]>();
إذا (المصدر. الطول==1)
{
result.add(source);
}
آخر
{
Object[] psource=new Object[source.length-1];
ل(int i=0;i<psource.length;i++)
{
psource[i]=source[i];
}
result=RandomC(psource);
int len=result.size();// طول مجموعة fn
result.add((new Object[]{source[source.length-1]}));
ل(int i=0;i<len;i++)
{
Object[] tmp=new Object[result.get(i).length+1];
ل(int j=0;j<tmp.length-1;j++)
{
tmp[j]=result.get(i)[j];
}
tmp[tmp.length-1]=source[source.length-1];
result.add(tmp);
}
}
نتيجة الإرجاع؛
}
ArrayList ثابت<Object[]> cmn(Object[] source,int n)
{
ArrayList<Object[]> result=new ArrayList<Object[]>();
إذا (ن==1)
{
ل(int i=0;i<source.length;i++)
{
result.add(new Object[]{source[i]});
}
}
وإلا إذا (source.length==n)
{
result.add(source);
}
آخر
{
Object[] psource=new Object[source.length-1];
ل(int i=0;i<psource.length;i++)
{
psource[i]=source[i];
}
result=cmn(psource,n);
ArrayList<Object[]> tmp=cmn(psource,n-1);
ل(int i=0;i<tmp.size();i++)
{
Object[] rs=new Object[n];
ل(int j=0;j<n-1;j++)
{
rs[j]=tmp.get(i)[j];
}
rs[n-1]=source[source.length-1];
result.add(rs);
}
}
نتيجة الإرجاع؛
}
}
3. استخدم فكرة البرمجة الديناميكية للبحث عن التباديل والتركيبات
انسخ رمز الكود كما يلي:
حزمة Acm؛
// بحث قوي عن الأرقام المركبة
الطبقة العامة MainApp {
public static void main(String[] args) {
int[] num=new int[]{1,2,3,4,5};
سلسلة سلسلة = ""؛
// ابحث عن عدد المجموعات المكونة من 3 أرقام
// العد(0,str,num,3);
// ابحث عن عدد مجموعات الأرقام ذات 1 ن
count1(0,str,num);
}
عدد الفراغ الثابت الخاص 1 (int i، String str، int[] num) {
إذا (ط == طول) {
System.out.println(str);
يعود؛
}
count1(i+1,str,num);
count1(i+1,str+num[i]+"،,num);
}
عدد الفراغات الثابتة الخاصة (int i، String str، int[] num,int n) {
إذا (ن==0){
System.out.println(str);
يعود؛
}
إذا (ط == طول) {
يعود؛
}
count(i+1,str+num[i]+"،,num,n-1);
العد(i+1,str,num,n);
}
}
وفيما يلي الترتيب
انسخ رمز الكود كما يلي:
حزمة Acm؛
// ابحث عن الترتيب، ابحث عن الترتيب بعد التباديل أو المجموعات المختلفة
استيراد java.util.Arrays؛
استيراد java.util.Scanner؛
العرض التوضيحي للفئة العامة 19 {
منطقية ثابتة خاصة f[];
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int sz=sc.nextInt();
ل(int i=0;i<sz;i++){
int sum=sc.nextInt();
f=new boolean[sum];
Arrays.fill(f, true);
int[] num=new int[sum];
ل(int j=0;j<sum;j++){
عدد[j]=j+1;
}
int nn=sc.nextInt();
سلسلة سلسلة = ""؛
العد (الأعداد، شارع، ن ن)؛
}
}
/**
*
* @param num يمثل المصفوفة التي سيتم ترتيبها
* @param str سلسلة مرتبة
* @param nn عدد العناصر المتبقية التي يجب ترتيبها، إذا كان الترتيب الكامل مطلوبًا، فإن nn هو طول المصفوفة.
*/
عدد الفراغات الثابتة الخاصة (int[] num, String str, int nn) {
إذا (ن == 0) {
System.out.println(str);
يعود؛
}
for(int i=0;i<num.length;i++){
إذا (! و[i]){
يكمل؛
}
f[i]=false;
count(num,str+num[i],nn-1);
f[i]=true;
}
}
}