⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ji.java

📁 实现数学中的全排列 Jcreator写的 功能:例123的排列有六个
💻 JAVA
字号:
package my;
import java.io.*;
import java.util.*;
class Ji{
public static void main(String args[])throws IOException 
{ System.out.println("请输入一个整数:");
	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s;
int n=0;
 while((s = (in.readLine()).trim())== null ||s.length()==0)
{ System.out.println("请输入非空的字符串");
if(s.length()>=1) break;
}
System.out.print("你输入的整数是:");
try
{ n=Integer.parseInt(s);
	
}
catch(Exception  e){
	System.out.println(e.toString());
	s=null;

}
System.out.println(n);
int []li=new int[n+1];
int []ji=new int[n+1];
li[0]=n;
for(int i=1;i<=n;i++)
   { System.out.println("请输入第"+i+"个数字");
     in = new BufferedReader(new InputStreamReader(System.in));
     int m=0;
     while((s = (in.readLine()).trim())== null ||s.length()==0)
       { System.out.println("请输入非空的字符串");
          if(s.length()>=1) break;
        }
    
     try
       { m=Integer.parseInt(s);
        }
    catch(Exception  e){
	        System.out.println(e.toString());
	      s=null;
	           }
    li[i]=m;

	}
	/////////////////
	
Date timeStart=new Date();//计时器

for(int k=1;k<=n-1;k++)
 { for(int a=1;a<n-k+1;a++)
     {if(li[a]>li[a+1])
     {
     	int temp=li[a];
     	li[a]=li[a+1];
     	li[a+1]=temp;
     }
      }
 }
 
   int zongNum=1;
 
for(int j=1;j<=n;j++)
   ji[j]=li[n-j+1];
   
//开始全排列
int index=-1;
int min=-1;
int flag=-1;
int minShu=-1;
int count=0;
Ji hh=new Ji();
	System.out.print("排列");
	for(int f=1;f<=n;f++)
   System.out.print(li[f]+" ");
    System.out.println();
text :while(true){
//	count++;
//if(count>=6) break;

 for(int x=n;x>=2;x--)
 { if(li[x]>li[x-1])
    { zongNum++; 
    index=x-1; 
      minShu=hh.minIndex(li,index,n);
     
      for(int u=1;u<=n;u++) 
           if(li[u]==minShu)  min=u;
     flag=li[index];
     li[index]=li[min];
     li[min]=flag;
  
  for(int b=index+1;b<n;b++)
  { for(int c=index+1;c<n;c++)
     {if(li[c]>li[c+1])
         {int ke=li[c];
              li[c]=li[c+1];
             li[c+1]=ke;
           }
     }
  }
  /////////
  
      break ;
    }
  }
  	System.out.print("排列");
	for(int f=1;f<=n;f++)
   System.out.print(li[f]+" ");
    System.out.println();
  int num=0;
  for(int v=1;v<=n;v++)
  { 
  if(li[v]==ji[v])
  {num++;
  }
  if(num==n)
    break text;
  }
 
}
Date timeEnd=new Date();
long time=timeEnd.getTime()-timeStart.getTime();
System.out.println(time);
System.out.println("耗时"+time/(1000*60*60)+"小时"+time%(1000*60*60)/(1000*60)+"分"+time%(1000*60)/1000+"秒"+time%1000+"毫秒");
 System.out.println("总的排列个数为"+zongNum);
}


public int minIndex(int []z,int index,int all)
{ 
int temp=z[all];
int init=z[index];
System.out.println();
for(int g=index+1;g<all;g++)
{
 for(int i=all;i>g;i--)
 {  if(z[i]<z[i-1])
 {temp=z[i];
 z[i]=z[i-1];
 z[i-1]=temp;
 }
}
 }
 for(int s=index+1;s<=all;s++)
 {if(z[s]>init){temp=z[s];break;
 }
 }
return temp;
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -