2015年4月8日 星期三

[2015][Homework]Team02 - Hw04

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

namespace Hw2
{
    class Program
    {
        static bool HasSolution(int a,int b,int c)
        {
            int GCD;
            //演算步驟一     計算 a, b 的最大公因數 
            int aCopy = a;
            int bCopy = b;
            int temp;
            if (a > b)
            {
                while (aCopy % bCopy != 0)
                {
                    temp = aCopy % bCopy;
                    aCopy = bCopy;
                    bCopy = temp;
                }
                GCD = bCopy;
            }
            else
            {
                while (bCopy % aCopy != 0)
                {
                    temp = bCopy % aCopy;
                    bCopy = aCopy;
                    aCopy = temp;
                }
                GCD = aCopy;
            }
            //演算步驟二     設(a, b) = k, 若 c 不為 k 的倍數, 則無解。 
            if (c % GCD != 0)
            {
                return false;
            }
            else
                return true;
            
        }
        static void Main(string[] args)
        {
            bool flag=true;
            int temp;
            while (flag)
            {
                Console.WriteLine("第一桶容量=");
                int containerA = int.Parse(Console.ReadLine());
                Console.WriteLine("第二桶容量=");
                int containerB = int.Parse(Console.ReadLine());
                Console.WriteLine("所需水量=");
                int waterRequired = int.Parse(Console.ReadLine());
                Console.WriteLine("A桶水為較小桶水,B桶為較大桶水");
                if (containerA > containerB)
                {
                    temp = containerB;
                    containerB = containerA;
                    containerA = temp;
                    Console.WriteLine("A桶容量{0}公升,B桶容量{1}公升", containerA, containerB);
                }
                else
                {
                    Console.WriteLine("A桶容量{0}公升,B桶容量{1}公升", containerA, containerB);
                }
                if (HasSolution(containerA, containerB, waterRequired) == true)
                {
                    int currentCapacityA = 0;
                    int currentCapacityB = 0;
                    int step = 0;
                    Console.WriteLine("一開始,A桶有水{0}公升,B桶有水{1}公升\n", currentCapacityA, currentCapacityB);
                    while (currentCapacityA + currentCapacityB != waterRequired)
                    {
                        step++;
                        if (containerA + containerB < waterRequired)
                        {
                            Console.WriteLine("被唬了");
                            break;
                        }
                        if (containerA + containerB == waterRequired)
                        {
                            currentCapacityA =containerA;
                            currentCapacityB = containerB;
                            Console.WriteLine("step{0}:兩桶皆滿水\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, currentCapacityA, currentCapacityB);
                        }
                        else if (currentCapacityB == 0)
                        {
                            currentCapacityB = containerB;
                            Console.WriteLine("step{0}:把B桶裝滿水\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, currentCapacityA, currentCapacityB);

                        }
                        else if (currentCapacityA >= containerA)
                        {
                            currentCapacityA = 0;
                            Console.WriteLine("step{0}:A桶水滿,把A桶的水全部倒掉\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, currentCapacityA, currentCapacityB);
                        }
                        else if (currentCapacityA + currentCapacityB >= containerA)
                        {
                            currentCapacityB = currentCapacityA + currentCapacityB - containerA;
                            currentCapacityA = containerA;
                            Console.WriteLine("step{0}:將B桶的水倒滿A桶\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, currentCapacityA, currentCapacityB);
                        }
                        else if (currentCapacityA + currentCapacityB != waterRequired)
                        {
                            currentCapacityA = currentCapacityA + currentCapacityB;
                            currentCapacityB = 0;
                            Console.WriteLine("step{0}:將B桶的水倒滿A桶\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, currentCapacityA, currentCapacityB);
                        }
                    }
                    if (containerA + containerB >= waterRequired)
                    {
                        Console.WriteLine("最後,A桶有水{0}公升,B桶有水{1}公升\n", currentCapacityA, currentCapacityB);
                        Console.WriteLine("將水{0}公升放在啟動開關上,解除炸彈", currentCapacityA + currentCapacityB);
                    }
                    Console.ReadLine();
                    Console.Clear();
                    while (true)
                    {
                        Console.WriteLine("還有其他犯人嗎?沒有請按0,有按1");
                        int response = int.Parse(Console.ReadLine());
                        if (response == 0)
                        {
                            flag = false;
                            break;
                        }
                        else if (response == 1)
                        {
                            flag = true;
                            break;
                        }
                        else
                            Console.Clear();
                    }
                }
                else
                { 
                    Console.WriteLine("解除炸彈是幌子,蹦!!!!!!!!!!!");
                    break;
                }
                }
            Console.Read();
            }
        }
    }

沒有留言:

張貼留言