当前位置: 代码迷 >> J2SE >> JAVA 有规则的不重复排列 。
  详细解决方案

JAVA 有规则的不重复排列 。

热度:43   发布时间:2016-04-24 02:03:06.0
JAVA 有规则的不重复排列 请教各位。?
有三组数字 
A组 1,4,8,11,15,18
B组 2,5,9,12,13,16
C组 3,6,7,10,14,17
然后从每一组里面取出一个数 组成一组号码 例如 1 2 3 又例如1,5,7
A组和B组的号码可以互换 而C组不能互换 
我的办法是通过将这些数字放到RANDOM里面随机 但是JAVA的伪随机码我不知道他的规律是什么 所以好像还是要自己写一个有规律而且又不能让人看出来 这其中规律的 好比第一次出现了123 那么在1000次之后在重新回到123这个数都可以 但是最起码不能第一次123 第10次又回来123这个数字排列上。

------解决方案--------------------
你还是用java的随机数吧,弄一个hashtable,每次随机产生一个组合就往里放,一直等放到1000个。

这时候hashtable中存在1000各不重复的组合,然后你把这些组合全部放到list中,

重复遍历这个list中不就是你要的随机且有规律吗?


------解决方案--------------------
这个链接里问题的答案可以作为本帖问题的先导
http://topic.csdn.net/u/20090814/01/bc7b70ff-d6ca-409f-bde1-cc89515ceb3b.html

借用下里面的方法应该可以满足需求

Java code
public class Test {    public static void main(String[] args) {        int[] a={1,4,8,11,15,18};        int[] b={2,5,9,12,13,16};        int[] c={3,6,7,10,14,17};        for(int i=0;i<100;i++){            int num=nextInt(i);            System.out.println(a[num/100%6]+","+b[(num/10)%10%6]+","+c[num%10%6]);        }    }    //以下方法作者为bigbug9002    private static int nextInt(int index){        if(index<0){            throw new IllegalArgumentException("num must be positive number.");         }        double x=Math.abs(Math.cos(Math.sqrt(2)*(index+1)));        double y=1.0*137/13/(index+1);        double z=17*index*index+29*index+67;        y=y-(int)y;        while(y*10<1) y*=10;        while(z>1) z/=7;        x=x*z+y;        String str=String.valueOf(x);        str=str.substring(2);        int start=index%13;        return Integer.parseInt(str.substring(start,start+3));        }}
  相关解决方案