一个面试题很土的解法(用循环解决)

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

 

package com.order;

public class test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        System.out.println("第三个位置是3的情况:");
        Method01 method01 = new Method01();
        method01.order();
        System.out.println("第三个位置是5的情况:");
        Method02 method02 = new Method02();
        method02.order();
        System.out.println("第三个位置既不是3也不是5的情况:");
        Method03 method03 = new Method03();
        method03.order();
        
    }
}


//第三个位置是3的情况
class Method01{
    public void order(){
    int[] a={1,2,2,4,5,3};
    for(int j=0;j<a.length-1;j++){
        for(int k=0;k<a.length-1;k++){
            if(k==j)
                continue;
            for(int l=0;l<a.length-1;l++){
                if(l==k||l==j)
                    continue;
                for(int y=0;y<a.length-1;y++){
                    if(y==l||y==k||y==k||y==j)
                        continue;
                    for(int u=0;u<a.length-1;u++){
                        if(u==y||u==l||u==k||u==j)
                            continue;
                        System.out.println(a[j]*100000+a[k]*10000+a[5]
*1000+a[l]*100+a[y]*10+a[u]);
                    }
                }
            }
        }
    }
}
}


//第三个位置是5的情况,没有
class Method02{
    public void order(){
    int[] a={1,2,2,4,3,5};
    for(int j=0;j<a.length-1;j++){
        for(int k=0;k<a.length-1;k++){
            if(k==j)
                continue;
            for(int l=0;l<a.length-1;l++){
                if(l==k||l==j)
                    continue;
                for(int y=0;y<a.length-1;y++){
                    if(y==l||y==k||y==k||y==j)
                        continue;
                    for(int u=0;u<a.length-1;u++){
                        if(u==y||u==l||u==k||u==j)
                            continue;
                        //if(a[j]!=a[4]&&a[k]!=a[4]&&a[l]!=a[4]&&a[y]!=a

[4]&&a[u]!=a[4])
                        System.out.println(a[j]*100000+a[k]*10000+a[5]

*1000+a[l]*100+a[y]*10+a[u]);
                    }
                }
            }
        }
    }
}
}


//不是第三个位置既也不是3也不是5的情况
class Method03{
    public void order(){
    int[] a={3,1,2,2,4,5};
    //最后一个for循环确定第三个位置上的数(i)
    for(int i=1;i<a.length-1;i++)
            //前两个for循环确定前两个数(j k)
        for(int j=0;j<a.length-1;j++){
            if(j==i)
                continue;
                for(int k=0;k<a.length-1;k++){
            if(k==j||k==i||j==i)
                continue;
            //后三个for循环确定最后3个数
            for(int l=1;l<a.length;l++){
                if(l==i||l==j||l==k||j==i)
                    continue;
                for(int o=1;o<a.length;o++){
                    if(o==l||o==k||o==j||o==i||j==i)
                        continue;
                    for(int u=1;u<a.length;u++){
                        if(u==o||u==l||u==k||u==j||u==i||j==i)
                            continue;
                        if(a[i]!=4)
                            System.out.println(a[j]*100000+a[k]

*10000+a[i]*1000+a[l]*100+a[o]*10+a[u]);
                }
                }
            }
        }    
    }        
    }
}

 

 

 

转载于:https://www.cnblogs.com/xiangxm/articles/Java.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值