这段java代码是自己花了很长时间写的,基本java初学者都看的懂,不过理解这个思想就有点复杂了,需要耐心的看下去。如果用传统的for循环来写的话,很复杂,很难实现高中学过的排列组合数的显示,运算结果很简单,但是显示这些有可能的组合就比较困难了。 impo
这段java代码是自己花了很长时间写的,基本java初学者都看的懂,不过理解这个思想就有点复杂了,需要耐心的看下去。如果用传统的for循环来写的话,很复杂,很难实现高中学过的排列组合数的显示,运算结果很简单,但是显示这些有可能的组合就比较困难了。 import java.util.*;
public class test15 {
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=0;i
{
System.out.print("请输入要进行操作的数:\t");
array[i]=s.nextInt();
}
System.out.print("您输入的数为:");
for(int j=0;j
{
System.out.print(array[j]+"、");
}
System.out.println("");
System.out.println("请输入要参与组合数的规模:(count)");
count=s.nextInt();
int[] temp=new int[size];
for(int i=0;i
{
if(i
{
temp[i]=1;
}
else
{
temp[i]=0;
}
}
System.out.print("初始化的临时数组为:"); //打印临时初始化数组
for(int i=0;i
{
System.out.print(temp[i]);
}
System.out.println(""); //换行
boolean flag=false;
int key=1;
do //循环进行转置操作 10变01,左边的1全部到最左端操作
{
int position=0; //判断查询到的10 的位置
int numbers=0; //记录查到的10位置前面的1的个数
int q=0;
int[] result=new int[count];
System.out.println("");
for(int i=0;i
{
if(temp[i]==1)
{
result[q]=array[i];
System.out.print(result[q]+"、");
q++;
}
}
for (int i = 0; i < size-1; i++) //找奥最后一个10的位置
{
if (temp[i] == 1 && temp[i + 1] == 0) //判断10的条件
{
temp[i] = 0;
temp[i + 1] = 1;
position = i; //第一次循环扫描后,返回第一次循环最后的10的地址
break; //跳出if循环
}
}
for (int i = 0; i < position; i++) //判断10左边的1的个数
{
if (temp[i] == 1)
numbers++;
}
for (int i = 0; i < position; i++) //把10位置左边的1全部移到最左端
{
if (i < numbers)
temp[i] = 1;
else
temp[i] = 0;
}
System.out.println("");
System.out.print("参考的临时数组为:");
for(int i=0;i
{
System.out.print(temp[i]);
}