A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 大天 中级黑马   /  2016-8-5 21:29  /  553 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

5 个回复

倒序浏览
public class Demo11 {
        public static void main(String[] args) {
                int count = 0;
                int number = 0;
                for(int i = 1;i <= 4; i++) {
                        for(int j = 1;j < 4; j++) {
                                for(int k = 1;k < 4; k++) {
                                        if(i==j||j==k|i==k) {
                                                continue;
                                        }
                                        else{
                                        count++;
                                        number = i*100+j*10+k;
                                        System.out.print(number+" ");
                                        }
                                }
                        }
                }
                System.out.println();
       
                System.out.println("一共有"+count+"数");
        }
}

点评

6666666666666  发表于 2016-8-6 22:02
回复 使用道具 举报
代码:
[Java] 纯文本查看 复制代码
    public static void main(final String[] args) {
        Main.traverse(ArrayUtil.box("1234".toCharArray()), 0, chars -> Log.debug(String.valueOf(ArrayUtil.unBox(chars))));
    }

    /**
     * 遍历几个元素的所有可能的组合
     *
     * @param array 元素列表
     * @param index 请传 0
     * @param out 结果输出的接口
     */
    public static <T> void traverse(final T[] array, final int index, final TraverseOut<T> out) {
        if (index == array.length - 1) {
            out.invoke(array);
        } else {
            for (int index2 = index; index2 < array.length; index2++) {
                ArrayUtil.swap(array, index, index2);
                Main.traverse(array, index + 1, out);
                ArrayUtil.swap(array, index, index2);
            }
        }
    }

    /**
     * 遍历结果输出的接口
     *
     * @author cat73
     */
    @FunctionalInterface
    public static interface TraverseOut<T> {
        void invoke(T[] t);
    }

输出:
[Java] 纯文本查看 复制代码
[00:00:00] [DEBUG]: 1234
[00:00:00] [DEBUG]: 1243
[00:00:00] [DEBUG]: 1324
[00:00:00] [DEBUG]: 1342
[00:00:00] [DEBUG]: 1432
[00:00:00] [DEBUG]: 1423
[00:00:00] [DEBUG]: 2134
[00:00:00] [DEBUG]: 2143
[00:00:00] [DEBUG]: 2314
[00:00:00] [DEBUG]: 2341
[00:00:00] [DEBUG]: 2431
[00:00:00] [DEBUG]: 2413
[00:00:00] [DEBUG]: 3214
[00:00:00] [DEBUG]: 3241
[00:00:00] [DEBUG]: 3124
[00:00:00] [DEBUG]: 3142
[00:00:00] [DEBUG]: 3412
[00:00:00] [DEBUG]: 3421
[00:00:00] [DEBUG]: 4231
[00:00:00] [DEBUG]: 4213
[00:00:00] [DEBUG]: 4321
[00:00:00] [DEBUG]: 4312
[00:00:00] [DEBUG]: 4132
[00:00:00] [DEBUG]: 4123

回复 使用道具 举报
cat73 发表于 2016-8-5 21:39
代码:
[mw_shl_code=java,true]    public static void main(final String[] args) {
        Main.traver ...

不是说3位数吗
回复 使用道具 举报
本帖最后由 cat73 于 2016-8-6 07:59 编辑

没仔细看,其实你取输出的后三位就是你要的答案了。
改成酱紫就好咯:
[Java] 纯文本查看 复制代码
Main.traverse(ArrayUtil.box("1234".toCharArray()), 0, chars -> Log.debug(new String(ArrayUtil.unBox(chars), 1, 3)));

输出:
[Java] 纯文本查看 复制代码
[00:00:00] [DEBUG]: 234
[00:00:00] [DEBUG]: 243
[00:00:00] [DEBUG]: 324
[00:00:00] [DEBUG]: 342
[00:00:00] [DEBUG]: 432
[00:00:00] [DEBUG]: 423
[00:00:00] [DEBUG]: 134
[00:00:00] [DEBUG]: 143
[00:00:00] [DEBUG]: 314
[00:00:00] [DEBUG]: 341
[00:00:00] [DEBUG]: 431
[00:00:00] [DEBUG]: 413
[00:00:00] [DEBUG]: 214
[00:00:00] [DEBUG]: 241
[00:00:00] [DEBUG]: 124
[00:00:00] [DEBUG]: 142
[00:00:00] [DEBUG]: 412
[00:00:00] [DEBUG]: 421
[00:00:00] [DEBUG]: 231
[00:00:00] [DEBUG]: 213
[00:00:00] [DEBUG]: 321
[00:00:00] [DEBUG]: 312
[00:00:00] [DEBUG]: 132
[00:00:00] [DEBUG]: 123


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马