一个二进制算法

来源:互联网 发布:初中教育状况网络调研 编辑:程序博客网 时间:2024/06/06 07:06
package zhu;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;


public class Test3 {


public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n=scan.nextInt();
List FrontEvenList = new ArrayList();//存放偶前部分
List BeforeEvenList = new ArrayList();//存放偶后
List FrontOddList = new ArrayList();//存放奇前
List BeforeOddList = new ArrayList();//存放奇后
if(n>1 && n<=24)
{
int m = (int) Math.pow(2, n);
System.out.println("数组最大数为:"+m);

//获取偶数前半部分 放入mapFrontEven
int mEven=m/2;
int i=0;
while(mEven-->=0)
{
if (mEven%2==0)
FrontEvenList.add(i++, mEven);
}
System.out.println("偶数前半部分:"+FrontEvenList.toString());
//获取偶数后半部分 放入 BeforeEvenList
int mEven2=m;
int i2=0;
while(mEven2-->=m/2)
{
if(mEven2%2==0)
BeforeEvenList.add(i2++, mEven2);
}
System.out.println("偶数后半部分:"+BeforeEvenList.toString());



//获取奇数前半部分 放入FrontOddList
int mOdd=m/2;
int j=0;
while(mOdd-->0)
{
if (mOdd%2!=0)
FrontOddList.add(j++,mOdd);
}
System.out.println("奇数前半部分:"+FrontOddList.toString());


//获取奇数后半部分 放入//获取技术前半部分 放入FrontOddList
int mOdd2=m;
int j2=0;
while(mOdd2-->m/2)
{
if (mOdd2%2!=0)
BeforeOddList.add(j2++,mOdd2);
}
System.out.println("奇数后半部分:"+BeforeOddList.toString());


//输出 按 偶前 + 奇前 +奇后 +偶后
int t=n>3?9500:500;//设置循环总体数
String [] resS = new String[9500];
int q=0;
while(t-->0){
int z=FrontEvenList.size();
int c=-1;
String res = "";
List FrontEvenList2 = new ArrayList(FrontEvenList);
List BeforeEvenList2 = new ArrayList(BeforeEvenList);
List FrontOddList2 = new ArrayList(FrontOddList);
List BeforeOddList2 = new ArrayList(BeforeOddList);
while(z-->0){
//随机取出前半偶数值
Random random = new Random();
//偶前
res+=String.valueOf(FrontEvenList2.get(c= (random.nextInt(FrontEvenList2.size()))))+" ";
FrontEvenList2.remove(c);
//奇前
res+=String.valueOf(FrontOddList2.get(c= (random.nextInt(FrontOddList2.size()))))+" ";
FrontOddList2.remove(c);
//奇后
res+=String.valueOf(BeforeOddList2.get(c= (random.nextInt(BeforeOddList2.size()))))+" ";
BeforeOddList2.remove(c);
//偶后
res+=String.valueOf(BeforeEvenList2.get(c= (random.nextInt(BeforeEvenList2.size()))))+" ";
BeforeEvenList2.remove(c);
}
resS[q++]=res;
}
//剔除重复元素
List<String> list = Arrays.asList(resS);
LinkedList ll = new LinkedList();
ll.addAll(list);
Set<String> set = new HashSet<String>();
for(int a=0; a<resS.length; a++) {
if(ll.contains(resS[a])) {
set.add(resS[a]);
}
}
Object[] array = set.toArray();
System.out.println("最后结果:");
for(Object s: array){
if(s!=null)
System.out.println(s);
}
System.out.println(array.length);
}else{
System.out.println("输入值不对");
}

}


}
0 0