输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻

输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
原始题目: http://topic.csdn.net/u/20080515/17/a3bba247-4970-45c2-bd94-1478a39ef4bd.html

代码:
package  niko7.csdn;

import  java.util.Iterator;
import  java.util.Set;
import  java.util.TreeSet;

/**
 * 输出1,2,2,3,4,5的所有排列组合,4不能在第三位,3和5不能相邻
 * 
 * 转载、引用必须保留此段信息。
 * 
@author niko7,(顾法华,杭州)
 * @email niko7@163.com
 *
 
*/

public   class  MyTest
{
    
public static void main(String[] args)
    
{
        
int[] nums = new int[]{1,2,2,3,4,5};
        
int len = nums.length;
        Set set 
= new TreeSet();
        
int[] indexs = new int[]{0,0,0,0,0,0};
        
for(indexs[0]=0; indexs[0]<len; indexs[0]++)
            
for(indexs[1]=0; indexs[1]<len; indexs[1]++)
                
for(indexs[2]=0; indexs[2]<len; indexs[2]++)
                    
for(indexs[3]=0; indexs[3]<len; indexs[3]++)
                        
for(indexs[4]=0; indexs[4]<len; indexs[4]++)
                            
for(indexs[5]=0; indexs[5]<len; indexs[5]++)
                            
{
                                
//同一个字符重复出现的跳过
                                
//两个2不是同一个字符
                                boolean skip = false;
                                a:
                                
for(int i=0;i<len;i++)
                                    
for(int j=i+1;j<len;j++)
                                    
{
                                        
if(indexs[i]==indexs[j])
                                        
{
                                            skip 
= true;
                                            
break a;
                                        }

                                    }

                                
if(skip)
                                
{
                                    
continue;
                                }

                                
                                
//4不能在第三位
                                if(4==nums[indexs[2]])
                                
{
                                    
continue;
                                }

                                
                                
//3和5不能相邻
                                boolean ok = true;
                                
int[] tmpResult = new int[]{nums[indexs[0]],nums[indexs[1]],nums[indexs[2]],nums[indexs[3]],nums[indexs[4]],nums[indexs[5]]};
                                
for(int i=0; i<len-1; i++)
                                
{
                                    
if(2==Math.abs(tmpResult[i]-tmpResult[i+1]) && 8==(tmpResult[i]+tmpResult[i+1]))
                                    
{
                                        ok 
= false;
                                        
break;
                                    }

                                }

                                
                                
if(ok)
                                
{
                                    
//自动去重,其实这是针对两个2的
                                    set.add(""+tmpResult[0]+tmpResult[1]+tmpResult[2]+tmpResult[3]+tmpResult[4]+tmpResult[5]);
                                }

                            }

        System.out.println(
"共有 "+set.size()+" 个");
        Iterator iter 
= set.iterator();
        
int no = 1;
        
while(iter.hasNext())
        
{
            
if(no%10==1)
            
{
                System.out.println();
                System.out.print(no);
            }

            no
++;
            System.out.print(
" " + iter.next());            
        }
        
    }
    
}

结果:
共有 
198  个

1      122345      122543      123245      123254      123425      123452      125234      125243      125423      125432
11      132245      132254      132425      132452      132524      132542      142325      142523      143225      143252
21      145223      145232      152234      152243      152324      152342      152423      152432      212345      212543
31      213245      213254      213425      213452      215234      215243      215423      215432      221345      221543
41      223145      223154      223415      223451      225134      225143      225413      225431      231245      231254
51      231425      231452      231524      231542      232145      232154      232415      232451      232514      232541
61      241325      241523      242315      242513      243125      243152      243215      243251      245123      245132
71      245213      245231      251234      251243      251324      251342      251423      251432      252134      252143
81      252314      252341      252413      252431      312245      312254      312425      312452      312524      312542
91      315224      315242      315422      321245      321254      321425      321452      321524      321542      322145
101      322154      322415      322451      322514      322541      325124      325142      325214      325241      325412
111      325421      341225      341252      341522      342125      342152      342215      342251      342512      342521
121      345122      345212      345221      412325      412523      413225      413252      415223      415232      421325
131      421523      422315      422513      423125      423152      423215      423251      425123      425132      425213
141      425231      431225      431252      431522      432125      432152      432215      432251      432512      432521
151      451223      451232      451322      452123      452132      452213      452231      452312      452321      512234
161      512243      512324      512342      512423      512432      513224      513242      513422      521234      521243
171      521324      521342      521423      521432      522134      522143      522314      522341      522413      522431
181      523124      523142      523214      523241      523412      523421      541223      541232      541322      542123
191      542132      542213      542231      542312      542321      543122      543212      543221
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值