[題目]找出最大時間

給予4組個位數字  排列出最大的時間  時間為24小時制 範圍為00:00 ~ 23:59 

假設給予1 2 3 4 輸出應為 23:41   若輸入輸字不合法應進行檢查

先來看一下24小時制的範圍  就可以輕鬆寫出程式了

小時 分鐘
十位數 個位數 十位數 個位數
0 0-9 0-5 0-9
1 0-9 0-5 0-9
2 0-3 0-5 0-9

 

可以看得出來 數組一定要包含0 1 2 其中一種數字才行

且>5的數字只能有2個   這邊可以先將這兩個不符的條件排除

在特別針對小時的十位數等於2時 對小時的個位數進行處理

且>5 的數字只能有1個

程式碼
while (true)
{
    List<int> number = new List<int>(); //存放輸入數值
    int hourTen = -1; //小時十位數
    int hourOne = -1; //小時個位數
    int minutesTen = -1; //分鐘十位數
    int minutesOne = -1; //分鐘個位數
    //塞值並檢查
    while (number.Count < 4)
    {
        string input = Console.ReadLine();
        Regex rex = new Regex("^[0-9]$");
        if (!rex.IsMatch(input))
        {
            Console.WriteLine("不合法的數字");
            continue;
        }
        number.Add(Convert.ToInt32(input));
    }
   
    //檢查不可能的數組
    var greater5Count = number.Where(x => x > 5).Count();
    bool check012 = number.Any(x => new List<int>() { 0, 1, 2 }.Contains(x));
    if (!check012 || greater5Count > 2)
    {
        Console.WriteLine("無法產出24小時制時間");
        continue;
    }

    //檢查當小時十位數為2時 是否能組出時間
    bool contans2 = number.Contains(2);
    //若大於5的數字有2個 勢必不能用2來當作十位數 十位數必須為0或1才行 若沒有0或1 代表無法組合出正確的時間格式
    if (contans2 && greater5Count > 1)
    {
        var less2 = number.Where(x => x <= 1);
        if (less2.Count() > 0)
            hourTen = less2.Max();
        else
        {
            Console.WriteLine("無法產出24小時制時間");
            continue;
        }
    }
    else
    {
        hourTen = number.Where(x => x <= 2).Max();
        number.Remove(hourTen);
    }
    
    //當小時十位數字為2時 小時個位數字只能小於4
    if (hourTen == 2)
    {
        var less4 = number.Where(x => x < 4);
        if (less4.Count() > 0)
            hourOne = less4.Max();
        else
        {
            Console.WriteLine("無法產出24小時制時間");
            continue;
        }
    }
    else
    {
        hourOne = number.Max();
    }
    number.Remove(hourOne);
    //分鐘的十位數必須小於6
    minutesTen = number.Where(x => x < 6).Max();
    number.Remove(minutesTen);
    minutesOne = number.First();
    Console.WriteLine($"{hourTen}{hourOne}:{minutesTen}{minutesOne}");
}
輸出結果

題目是解出來了

但是要怎麼測試呢....?

如果直接把0000~9999放進去會有同組數字重複測的問題...

該如何解決呢..?