用1、2、2、3、4、5 这六个数字,用java 写一个main 函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连。

下面的代码是网上找的,我按照自己的理解加的注释:

public class test01 {
    public static void main(String[] args) {
    // 理论上,题目所要求的排列组成的数字,都包含在122345~543221之间,所以外层循环控制数值遍历
        for(int i=122345;i<=543221;i++){
            // 将数字i转换成char类型的数组s,例如当i=122345时,s[]={'1','2','2','3','4','5'}
            char s[]=new Integer(i).toString().toCharArray();
            // 声明变量s1,s2,s3,s4,s5,flag作为判断依据,并设置初始值         
            int s1=0;
            int s2=0;
            int s3=0;
            int s4=0;
            int s5=0;
            boolean flag=true;
            // 声明变量j作为数组s中的元素的下标(index)
            for(int j=0;j<s.length;j++){
                // 判断数组s中的元素是否包含在{'1','2','3','4','5'}中,是则对应的s1,s2,s3,s4,s5加1
                // 其中s1代表元素'1'在当前数组s中出现的次数,s2,s3,s4,s5同理
                if(s[j]=='1'){s1++;}
                if(s[j]=='2'){s2++;}
                if(s[j]=='3'){s3++;}
                if(s[j]=='4'){s4++;}
                if(s[j]=='5'){s5++;}
                // 判断'3'与'5'是否相连,是则不符合题目要求,flag返回false
                if(j!=s.length-1){
                    if(s[j]=='3'&&s[j+1]=='5'||s[j]=='5'&&s[j+1]=='3'){flag=false;}
                }
            }
            // 判断数组s中第三位的元素是否为'4',是则不符合题目要求,flag返回false
            if(s[2]=='4'){
                flag=false;
            }
            // 判断当前数值i是否符合题目所要求的排列,是则输出i
            if(s1==1&&s2==2&&s3==1&&s4==1&&s5==1&&flag){
                System.out.println(i);
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值