专题:简单排列

首先从一个简单的入门级的编程题开始吧。

题目

【A】有1,2, 3三个数字,能够组成多少个互不相同且无重复数字的三位数?并将它们全部列举出来。
【B】有1,5,8三个数字,能够组成多少个互不相同且无重复数字的三位数?并将它们全部列举出来。

A参考答案:
public static void test(){
        int count=0;
        for(int i=1;i<=3;i++){
            for(int j=1;j<=3;j++){
                for(int k=1;k<=3;k++){
                    if(i!=j&&i!=k&&j!=k){
                        count++;
                        System.out.println(""+i+j+k);
                    }
                }
            }
        }
        System.out.println("个数:"+count);
    }
B参考答案:
public static void test01(){
        int count=0;
        int[] a={1,5,8};
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                for(int k=0;k<3;k++){
                    if(a[i]!=a[j]&&a[i]!=a[k]&&a[j]!=a[k]){
                        count++;
                        System.out.println(""+a[i]+a[j]+a[k]);
                    }
                }
            }
        }
        System.out.println("个数:"+count);
    }
解题思路:

分析题目,将解题思路划分为两个步骤,一、组成一个三位数,二、给组成三位数的过程中添加限定条件。
一、如何组成一个三位数,第一次生成百位上的数,第二次生成十位上的数,第三次生成个位上的数,很明显能够联想到三个for循环,生成的数彼此之间互不相同,但是却存在多个数的不同位数上有相同的数。
二、通过判断每一位上的数都不相同来实现条件限定。

通过代码实现和数学实现还是有点区别,计算机的实现思路就是通过顺序分支循环来处理问题,特点就是快速机械重复,与人的自然思维略微有点不同,人的自然思维一般都是比较直接。比如说:我们一般进行排列的时候,第一个数选了1,很自然的就把剩下的数就从2和3中进行选择,直接就把每一位上的数不同这个条件给添加进来了。

由于计算机的快速机械重复的特点,计算机处理问题可以使用人的自然思维看起来很笨的思路,就是将所有的情况列举出来,但是这种思路在计算机处理实际问题中相当普遍和经典,人们将这种思路称之为:穷举法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值