熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

java實現10個數的全排列的應用

2013-11-23 19:07:58  來源: Java核心技術 
   在校園網的論壇上看到的一些題目放假了沒有什麼事做就想到了自己來試著做一些到今天 才總是把它給做成了我想要實現的結果了有時候就是那樣做了好久都沒辦法做出來到靈感來了的那一下一下子就可以做出來心裡有點高興在這個過程中我對JAVA的IO了解得比以前多了一點雖然還不是很熟悉但大概也知道怎麼用了
如下
  給定等式  A B C D E     其中每個字母代表一個數字且不同數字對應不
                    D F G     同字母編程求出這些數字並且打出這個數字的
             +      D F G     算術計算豎式
             ───────
          語句      X Y Z D E
下面是我自己的JAVA代碼裡面有很大一段是人家寫的個數的全排列我只是把修改成了JAVA



import javaio*;
public class PaiLei{
    static int count=;
    private char[]  symbol={ABCDEFGXYZ} ;
    int [] num={};
    public void  check(){
        //Systemoutprint(進來了呀);
        //temp 表示數字ABCDE
        int temp=num[]*+num[]*+num[]*+num[]*+num[];
        //temp表示數字DFG
        int temp=num[]*+num[]*+num[];
        //temp表示數字XYZDE
        int temp=num[]*+num[]*+num[]*+num[]*+num[];
        //判斷表達式是不是成立
        //Systemoutprint(進入循環);

        if((temp+temp*)==temp){
            count++;
            Systemoutprintln(temp+temp+temp);
            Systemoutprintln(temp);
            Systemoutprintln(+count+種答案);
            print();
        }    
                     
          
    }
    //function方法是核心方法就是求個數的全排列
    /** *//**
        例:將到N的N個自然數排成一列共有**……*N種不同的排列方法
        N= 有種排列方案分別為試編程序輸出
        到N的全部排列假設N< 為了設計出由計算機輸出到N的全部排列程序
        就必須尋找不同排列之間的規律 通過觀察N=(參見本例的運行結果)的排
        列情況可以發現如果把每個排列看作一個自然數 則所有排列對應的數是
        按從小到大的順序排列從當前的排列產生下一個排列時必然會造成某一 位
        置上的數字變大這一位置顯然應該盡量靠右並且在它左邊位置上的數字保
        持不變這就意味著這一位置變成的數字來自於它的右邊   並且變大的幅度
        要盡可能小也就是說在它右邊如有幾個 數同時比它大時應該用其中最小的
        來代替它由於這一位置是滿足上述條件的最右邊的一位 所以在它右邊的所
        有數字按逆序排列即在這些數字的右邊沒有一個大於它的數程序中先從右
        至左找到第一個位置該位置上的數比它右邊的數小這個位置就是所要找的
        滿足上述條件的位置 然後再從右到左找到第一個比該位置上的數字大的數
        字所在的位置將這兩個位置上的數字交換再將該位置右邊的所有元素顛倒
        過來即將它們按從小到大的順序排列就得到了下一個排列      
        
      結果應該是   
      Input   n:   
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                      
                                    
        
           
      #include<iostream>   
      using   namespace   std;   
        
      void   main(){   
            int   n;                                     //n個數字的排列;   
            cout<<input:;   
            cin>>n;   
            int   *p=new   int[n];                   //數組保存各位數字;   
            for(int   i=;i<n;i++)             //初始化為第一個排列;   
                  p[i]=i+;   
            do{   
                  for(i=;i<n;i++)             //輸出排列中的數字   
                        cout<<p[i]<<   ;   
                  cout<<endl;               
                  for(int   j=n;j>;j)       //從右向左;找要交換的位置(j);   
                        if(p[j]>p[j])   break;   
                  if(j==)break;                   //找不到要交換的位置退出do   
                  j;   
                  for(int   k=n;k>j;k)       //在位置右邊;從右向左;   
                                                      //找要交換的位置(k);   
                        if(p[k]>p[j])break;   
                  swap(p[k]p[j]);             //交換位置和位置的值;   
                  //把位置後邊的所有位反序排列;   
                  for(int   x=j+y=n;x<y;x++y)   
                        swap(p[x]p[y]);   
            }while();   
      delete   []p;   
      }
         
      */
    public void function()throws IOException{
        int itempj;
        do{            
            check();
            //write();
            
            for(i=;i>;i){
                if(num[i]>num[i])
                    break;
            }
            if(i==)
                break;
            i;
            for(j=;j>i;j){
                if(num[j]>num[i]) break;
            }
            temp= num[j];
            num[j]=num[i];
            num[i]=temp; 
            //下面循環是
            for(int x=i+y=;x<y;x++y){
                temp=num[x];
                num[x]=num[y];
                num[y]=temp;
            }            
        }while(true);
    }
    //輸出正確結果的方法
    public void print(){
            for(int j=;j<=;j++){            
                      //輸出ABCDEFGXYZ              
                     Systemoutprint(symbol[j]+  );                      
              }
                  Systemoutprintln();
                      for(int j=;j<=;j++){    
                          //輸出他們對應的值                      
                          Systemoutprint(num[j]+  );                      
                      }
            Systemoutprintln();
                        Systemoutprintln(        +num[]+num[]+num[]+num[]+num[]);
                  Systemoutprintln(          +num[]+num[]+num[]);
                  Systemoutprintln(  +       +num[]+num[]+num[]);
                  Systemoutprintln(        +num[]+num[]+num[]+num[]+num[]);
                     Systemoutprintln();

                  
    }
    //將所有排列寫入記事本
    public void write()throws IOException{
         File myfile=new File(d:\paieitxt);
         FileOutputStream out=new FileOutputStream(myfiletrue);
         DataOutputStream out=new DataOutputStream(out);
         byte[] temp={};
         for(byte i=;i<=;i++){
             temp[i]=(byte)num[i];         //num數組是一個int型
             outwriteByte(temp[i]+);
             PrintStream out=new PrintStream(out);
             outprint( );
            // outclose();             
         }
         PrintStream out=new PrintStream(out);
         outprintln();
        // outclose();
//==============下面幾行注釋了的是向控治台輸出顯示       
//         ByteArrayInputStream in=new ByteArrayInputStream(temp);
//         int data=inread();
//         while(data!=){
//             //outwrite(temp);
//             Systemoutprint(  +data);
//             data=inread();
//         }
//         Systemoutprint( );
//         inclose();
         outclose();            
    } 
    public static void main(String [] args) throws IOException{
            PaiLei p=new PaiLei();
            pfunction();
            
        }   
    
}

  


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26328.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.