2015年4月6日 星期一

[2015][Homework]Team01 - Hw04

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HW4
{
    class HW4
    {
        static void Main(string[] args)
        {
            int jugA;
            int jugB;
            int target;
            bool isSolvable;
            Console.WriteLine("----------------萬用分水遊戲----------------");
            Console.WriteLine("請輸入容器A的容量:");
            jugA = int.Parse(Console.ReadLine());
            Console.WriteLine("請輸入容器A的容量:");
            jugB = int.Parse(Console.ReadLine());
            Console.WriteLine("請輸入目標水量:");
            target = int.Parse(Console.ReadLine());
            if ((target % gcd(jugA, jugB) == 0 && target <= jugA + jugB) || (target == jugA + jugB))    //判斷是否有解
            {
                isSolvable = true;
                //Console.WriteLine("可解!");
            }
            else
            {
                isSolvable = false;
                Console.WriteLine("不可解!");
            }
            int capacityA = 0;
            int capacityB = 0;
            int step = 0;
            if (isSolvable)
            {
                if (jugA == target)
                {
                    Console.WriteLine("將A容器裝滿則分水成功!");
                }
                else if (jugB == target)
                {
                    Console.WriteLine("將B容器裝滿則分水成功!");
                }
                else if (target == jugA + jugB)
                {
                    Console.WriteLine("將A及B容器裝滿則分水成功!");
                }
                else
                {
                    do
                    {
                        step++;
                        if (capacityA == 0)
                        {
                            capacityA = jugA;
                            Console.WriteLine("第{0,2}步驟:將A容器裝滿\n現今水量 A:{1,2} B:{2,2}", step, capacityA, capacityB);
                        }
                        else if (capacityB == jugB)
                        {
                            capacityB = capacityA;
                            capacityA = 0;
                            Console.WriteLine("第{0,2}步驟:將B容器倒光,且A容器之水全數倒入B容器\n現今水量 A:{1,2} B:{2,2}", step, capacityA, capacityB);
                        }
                        else if (capacityA + capacityB < jugB && capacityA == jugA)
                        {
                            capacityB += capacityA;
                            capacityA = 0;
                            Console.WriteLine("第{0,2}步驟:將A容器之水全數倒進B容器\n現今水量 A:{1,2} B:{2,2}", step, capacityA, capacityB);
                        }
                        else if (capacityA + capacityB >= jugB && capacityA == jugA)
                        {
                            capacityA -= (jugB - capacityB);
                            capacityB = jugB;
                            Console.WriteLine("第{0,2}步驟:以A容器之水將B容器倒滿\n現今水量 A:{1,2} B:{2,2}", step, capacityA, capacityB);
                        }
                        else
                        {
                            Console.WriteLine("ERROR!");
                            break;
                        }
                    }
                    while (!(capacityA == target || capacityB == target || (capacityA + capacityB) == target));
                    Console.WriteLine("完成目標,分水成功!");
                }
            }
            else
            {
                Console.WriteLine("程式結束!");
            }
            Console.ReadKey();
        }
        public static int gcd(int a, int b)    //輾轉相除法求GCD
        {
            if (a % b == 0)
            {
                return b;
            }
            else
            {
                return gcd(b, a % b);
            }
        }  
    }
}

沒有留言:

張貼留言