| 
參考 題型範例 - 全國高級中等學校技藝競賽平台 工業類 題目:這不是河內塔喔! 假設在 A 柱上有五個色環,如圖 (a) 所示,排列順序由上而下為 1, 2, 3, 4, 5,小明要把 A 柱上的色環搬到 C 柱上,但每個色環都必須經過 B 柱,搬法有各種組合,例如可以通通先搬到 B 柱上,例如圖 (b),先將五個色環按照次序由 A 柱搬到 B 柱上,再將五個色環依照順序如圖 (c),由 B 柱搬到 C 柱上,最後在 C 柱上的色環由上而下順序為 1, 2, 3, 4, 5。也可以一次搬一個色環如圖 (d),由 A 柱一次搬一個色環到 B 柱,再如圖 (e),把這個色環由 B 柱搬到 C 柱,最後的結果如圖 (f) 所示,在 C 柱上的色環由上而下順序為 5, 4, 3, 2, 1。 執行結果 ![]() 執行結果 ![]() 執行結果 ![]() 
using System;
namespace _109_3
{
    internal class Program
    {
        private static Stack<int> B = new Stack<int>();
        private static List<int> A, C;
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            do
            {
                int k = 0, ic = 0;
                string ans = "Yes";
                string s = Console.ReadLine();
                if (s == "0") break;
                B.Clear();
                C = new List<int>(Array.ConvertAll(s.Split(' '), int.Parse));
                C.Reverse();
                A = Enumerable.Range(1, n).ToList();
                do
                {
                    k = A.IndexOf(C[ic]);
                    if (k < 0)//不在 A 裡面
                    {
                        if (B.Peek() == C[ic])
                        {
                            B.Pop();
                            ic++;
                        }
                        else
                        {
                            ans = "No";
                            break;
                        }
                    }
                    else//A 裡面有
                    {
                        for (int i = 0; i < k; i++)
                        {
                            B.Push(A[0]);
                            A.RemoveAt(0);
                        }
                        A.RemoveAt(0);
                        ic++;
                    }
                } while (ic < n);
                Console.WriteLine(ans);
            } while (true);
        }
    }
}
 |