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

Java鍵盤獲取排列組合數,進行排列顯示以及排列計算

2013-11-23 19:12:30  來源: Java核心技術 

  這段java代碼是自己花了很長時間寫的基本java初學者都看的懂不過理解這個思想就有點復雜了需要耐心的看下去如果用傳統的for循環來寫的話很復雜很難實現高中學過的排列組合數的顯示運算結果很簡單但是顯示這些有可能的組合就比較困難了

  import javautil*;

  public class test {

  public static void main(String args[])

  {

  int size;

  int count;

  Scanner s=new Scanner(Systemin);

  Systemoutprint(請輸入您輸入的組合數的規模:(size));

  size=snextInt();

  int array[] = new int[size];

  for(int i=;i<size;i++)

  {

  Systemoutprint(請輸入要進行操作的數:\t);

  array[i]=snextInt();

  }

  Systemoutprint(您輸入的數為:);

  for(int j=;j<size;j++)

  {

  Systemoutprint(array[j]+);

  }

  Systemoutprintln();

  Systemoutprintln(請輸入要參與組合數的規模:(count));

  count=snextInt();

  int[] temp=new int[size];

  for(int i=;i<size;i++)     //臨時數組初始化為數組進行操作

  {

  if(i<count)

  {

  temp[i]=;

  }

  else

  {

  temp[i]=;

  }

  }

  Systemoutprint(初始化的臨時數組為:);    //打印臨時初始化數組

  for(int i=;i<size;i++)

  {

  Systemoutprint(temp[i]);

  }

  Systemoutprintln();            //換行

  boolean flag=false;

  int key=;

  do                         //循環進行轉置操作     左邊的全部到最左端操作

  {

  int position=;        //判斷查詢到的 的位置

  int numbers=;         //記錄查到的位置前面的的個數

  int q=;

  int[] result=new int[count];

  Systemoutprintln();

  for(int i=;i<arraylength;i++)       //輸出數組的情況

  {

  if(temp[i]==)

  {

  result[q]=array[i];

  Systemoutprint(result[q]+);

  q++;

  }

  }

  for (int i = ; i < size; i++)     //找奧最後一個的位置

  {

  if (temp[i] == && temp[i + ] == )   //判斷的條件

  {

  temp[i] = ;

  temp[i + ] = ;

  position = i;     //第一次循環掃描後返回第一次循環最後的的地址

  break;    //跳出if循環

  }

  }

  for (int i = ; i < position; i++)    //判斷左邊的的個數

  {

  if (temp[i] == )

  numbers++;

  }

  for (int i = ; i < position; i++)     //把位置左邊的全部移到最左端

  {

  if (i < numbers)

  temp[i] = ;

  else

  temp[i] = ;

  }

  Systemoutprintln();

  Systemoutprint(參考的臨時數組為:);

  for(int i=;i<size;i++)

  {

  Systemoutprint(temp[i]);

  }

  flag=false;

  for (int i = sizecount; i < size; i++)  // 判斷是否為最後一個組合當第一個移動到數組的mn的位置即n個全部移動到最右端時就得到了最後一個組合

  {

  if (temp[i] == )

  flag = true;  //如果從第sizenumbers開始掃描是不是最後一個組合

  }

  key++;

  }while(flag);

  int p=;

  int[] array=new int[count];

  Systemoutprintln();

  for(int i=;i<arraylength;i++)       //輸出數組的情況

  {

  if(temp[i]==)

  {

  array[p]=array[i];

  Systemoutprint(array[p]+);

  p++;

  }

  }

  Systemoutprintln();

  Systemoutprintln(可能次數為:+key);

  }

  }

  這個程序采用了一個臨時的temp數組被選中的置沒有被選中的置然後掃描臨時數組發現就置為並且返回位置信息position以便進行把position左邊的全部放到數組的最左端這段程序還有一個大的難點就是判斷循環最後的一個條件這個條件就是掃描從sizenumbers開始到size結束時的後面的數組中沒有一個就是最後一個可能的組合

  通過上面簡短的介紹再加上程序的理解大家應該可以看的懂這段代碼本代碼是放在myeclipse 中寫的絕對可以跑的起來這些都是本人一個鍵一個鍵敲出來的希望大家頂一下尊重一下勞動成果如果有更好的意見希望能夠聯系我


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