知识大全 Java键盘获取排列组合数,进行排列显示以及排列计算

Posted

篇首语:旧书不厌百回读,熟读精思子自知。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java键盘获取排列组合数,进行排列显示以及排列计算相关的知识,希望对你有一定的参考价值。

Java键盘获取排列组合数,进行排列显示以及排列计算  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  这段java代码是自己花了很长时间写的 基本java初学者都看的懂 不过理解这个思想就有点复杂了 需要耐心的看下去 如果用传统的for循环来写的话 很复杂 很难实现高中学过的排列组合数的显示 运算结果很简单 但是显示这些有可能的组合就比较困难了

  import java util *;

  public class test

  public static void main(String args[])

  

  int size;

  int count;

  Scanner s=new Scanner(System in);

  System out print( 请输入您输入的组合数的规模:(size) );

  size=s nextInt();

  int array[] = new int[size];

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

  

  System out print( 请输入要进行操作的数:\\t );

  array[i]=s nextInt();

  

  System out print( 您输入的数为: );

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

  

  System out print(array[j]+ );

  

  System out println( );

  System out println( 请输入要参与组合数的规模:(count) );

  count=s nextInt();

  int[] temp=new int[size];

  for(int i= ;i<size;i++)     //临时数组初始化为 数组 进行操作

  

  if(i<count)

  

  temp[i]= ;

  

  else

  

  temp[i]= ;

  

  

  System out print( 初始化的临时数组为: );    //打印临时初始化数组

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

  

  System out print(temp[i]);

  

  System out println( );            //换行

  boolean flag=false;

  int key= ;

  do                         //循环进行转置操作     变 左边的 全部到最左端操作

  

  int position= ;        //判断查询到的 的位置

  int numbers= ;         //记录查到的 位置前面的 的个数

  int q= ;

  int[] result=new int[count];

  System out println( );

  for(int i= ;i<array length;i++)       //输出数组的情况

  

  if(temp[i]== )

  

  result[q]=array[i];

  System out print(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] = ;

  

  System out println( );

  System out print( 参考的临时数组为: );

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

  

  System out print(temp[i]);

  

  flag=false;

  for (int i = size count; i < size; i++)  // 判断是否为最后一个组合 当第一个 移动到数组的m n的位置 即n个 全部移动到最右端时 就得到了最后一个组合

  

  if (temp[i] == )

  flag = true;  //如果从第size numbers开始 扫描是不是最后一个组合

  

  key++;

  while(flag);

  int p= ;

  int[] array =new int[count];

  System out println( );

  for(int i= ;i<array length;i++)       //输出数组的情况

  

  if(temp[i]== )

  

  array [p]=array[i];

  System out print(array [p]+ );

  p++;

  

  

  System out println( );

  System out println( 可能次数为: +key);

  

  

  这个程序采用了一个临时的temp数组 被选中的置 没有被选中的置 然后扫描临时数组 发现 就置为 并且返回位置信息position 以便进行把position左边的 全部放到数组的最左端 这段程序还有一个大的难点就是 判断循环最后的一个条件 这个条件就是扫描从size numbers开始到size结束时的后面的数组中没有一个 就是最后一个可能的组合

cha138/Article/program/Java/hx/201311/26442

相关参考