コード例 #1
0
        static void Main(string[] args)
        {
            int[] nums = ParseToInt(Console.ReadLine().Split());

            int n = nums[0];
            int m = nums[1];

            Queue <SequenceNtoM> items = new Queue <SequenceNtoM>();

            items.Enqueue(new SequenceNtoM(n, null));

            while (items.Count > 0)
            {
                SequenceNtoM currentItem = items.Dequeue();

                if (currentItem.Value < m)
                {
                    items.Enqueue(new SequenceNtoM(currentItem.Value + 1, currentItem));
                    items.Enqueue(new SequenceNtoM(currentItem.Value + 2, currentItem));
                    items.Enqueue(new SequenceNtoM(currentItem.Value * 2, currentItem));
                }

                if (currentItem.Value == m)
                {
                    PrintSolution(currentItem);
                    break;
                }
            }
        }
コード例 #2
0
        private static void PrintSolution(SequenceNtoM item)
        {
            Stack <int> output = new Stack <int>();

            while (item != null)
            {
                output.Push(item.Value);
                item = item.PreviousItem;
            }

            Console.WriteLine(string.Join(" -> ", output));
        }
コード例 #3
0
 public SequenceNtoM(int value, SequenceNtoM previousItem)
 {
     this.Value        = value;
     this.PreviousItem = previousItem;
 }