(每日一练·面试题)得到最早时间、最晚时间

输入一个6位数,给出这6位数能拼出的最晚时间和最早时间,以逗号隔开。

输入样例:

123456

输出样例:

235641,123456


/**
 * 算法思想
 * 1、创建两个相同的数组 元素长度都相同、创建一些变量分别代表最大值、最小值、和这些数字的索引
 * 2、one  two 代表数组内两个数字组成的两位数
 * 3、通过冒泡循环一次得到数组里的两位数one two 依次做出判断是否符合条件,如果符合则one、two分别赋值给对应的变量
 * 如果不符合则寻找下一位两位数、并得到两个数字的索引位
 * 4、出循环之后、需要把得到的索引位置上的数字赋值为0 、 9 (因为已经使用过的数字不得在使用第二次)
 *
 */

import java.util.Scanner;
public class testone {
    public static void main(String[] args) {
        int[] arr = new int[6];
        int[] arr1 = new int[6];
        Scanner input = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            arr[i] = input.nextInt();
            arr1[i] = arr[i];
        }
        int shi = 0;//寻找最大值
        int fen = 0;
        int miao = 0;
        int minshi = 24;//寻找最小值
        int minfen = 60;
        int minmiao = 60;
        int one = 0;//通过for循环任意两个数组成两位数
        int two = 0;
        int index = 0;//找到最后一次使用的数字下标 通过索引为 赋值为0
        int index1 = 0;
        int index3 = 0;
        int index4 = 0;

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (i == j) {
                    continue;
                }
                one = arr[i] * 10 + arr[j];
                if (one > 0 && one < 24 && one > shi) {
                    shi = one;
                    index = i;
                    index1 = j;
                }

                if (one > 0 && one < 60 && one > fen) {
                    fen = one;
                    index3 = i;
                    index4 = j;
                }

            }
        }
        arr[index] = 0;
        arr[index1] = 0;
        arr[index3] = 0;
        arr[index4] = 0;

        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (i == j) {
                    continue;
                }
                two = arr[i] * 10 + arr[j];
                if (two > 0 && two < 60 && two > miao && two < fen) {
                    miao = two;
                }
            }
        }
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1.length; j++) {
                if (i == j) {
                    continue;
                }
                one = arr1[i] * 10 + arr1[j];
                if (one > 0 && one < 24 && one < minshi) {
                    minshi = one;
                    index = i;
                    index1 = j;
                }
            }
        }
        arr1[index] = 9;
        arr1[index1] = 9;
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1.length; j++) {
                if (i == j) {
                    continue;
                }
                one = arr1[i] * 10 + arr1[j];
                if (one > 0 && one < 60 && one < minfen) {
                    minfen = one;
                    index3 = i;
                    index4 = j;
                }
            }
            }
            arr1[index3] = 9;
            arr1[index4] = 9;

            for (int i = 0; i < arr.length; i++) {
                for (int j = 0; j < arr.length; j++) {
                    if (i == j) {
                        continue;
                    }
                    two = arr1[i] * 10 + arr1[j];
                    if (two > 0 && two < minmiao) {
                        minmiao = two;
                    }
                }
            }
            System.out.print(shi);
            System.out.print(fen);
            System.out.print(miao);
            System.out.print(",");
            System.out.print(minshi);
            System.out.print(minfen);
            System.out.print(minmiao);
         }
    }

以上代码运行输入的6位数数字,在找寻最早时间的时候有一个问题,如果最早的时、分已经找到,四位数字被占用,那么我的思路是把这四位数字赋值为9,最后通过循环找到秒数,如果最后的两位数小于60那么就能得到最终的时间;如果大于60,那么循环将不会为秒数赋值,将会得到我一开始赋值的60秒。

                如果各位有更好的思路那么欢迎评论!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值