这段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 中写的绝对可以跑的起来这些都是本人一个键一个键敲出来的希望大家顶一下尊重一下劳动成果如果有更好的意见希望能够联系我