2015年4月8日 星期三

[2015][Homework]Team05 - Hw04

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

namespace HW2
{
    class Program
    {
        static void Main(string[] args)
        {
            HW jug = new HW();
            while(true)
            {
                Console.Clear();
                Console.WriteLine("輸入1~2題號");
                switch(int.Parse(Console.ReadLine()))
                {
                    case(1):
                        //第一題 
                        Console.WriteLine("輸入A值");
                        jug.numA = int.Parse(Console.ReadLine());
                        Console.WriteLine("輸入B值");
                        jug.numB = int.Parse(Console.ReadLine());
                        Console.WriteLine("輸入C值");
                        jug.numC = int.Parse(Console.ReadLine());//輸入ABC三值
                        jug.solve();
                        break;
                    case(2):
                        //第二題
                        Console.WriteLine("輸入A值");
                        jug.numA = int.Parse(Console.ReadLine());
                        Console.WriteLine("輸入B值");
                        jug.numB = int.Parse(Console.ReadLine());
                        Console.WriteLine("輸入C值");
                        jug.numC = int.Parse(Console.ReadLine());//輸入ABC三值
                        jug.solveJugPuzzle();
                        Console.ReadKey();
                        break;
                    default:
                        return;
            }
            }
        }
    }
}
function
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HW2
{
    class HW
    {
        public int numA;
        public int numB;
        public int numC;
        int tempA;
        int tempB;
        public int gcd()
        {
            tempA = numA;
            tempB = numB;
            int mod = tempA % tempB;//宣告暫存變數 mod為輾轉相除法運算用
            while (mod > 0)
            {
                tempA = tempB;
                tempB = mod;
                mod = tempA % tempB;
            }
            return tempB;
        }
        public void solve()
        {
            if (numC % gcd() != 0)
            {
                Console.WriteLine("此題無解");
                Console.ReadKey();
                return;//當C無法被最大公因數整除時結束程式
            }
            int tempD = numA / gcd();
            int tempE = numB / gcd();
            int tempF = numC / gcd();
            double X = 0;
            int Y = 0;
            for (Y = 0; Y <= numA; Y++)
            {
                X = ((double)tempF - (double)(tempE * Y)) / (double)tempD;//因X為浮點數 計算過程需要資料轉型 
                if (X % 1 == 0)
                    break;//當X整除1時代表X為整數 即跳脫迴圈 不再進行運算
            }
            Console.WriteLine("通解為");
            Console.WriteLine("X={0}+{1}t", X, tempE);
            Console.WriteLine("Y={0}-{1}t", Y, tempD);
            Console.WriteLine("t為整數");
            Console.ReadKey();
        }
        public void solveJugPuzzle()
        {
            int glass1 = numA;
            int glass2 = numB;
            int need = numC;//宣告兩杯子之容量以及所需要之水量
            int water1 = 0;
            int water2 = 0;//宣告兩杯中水量
            if ((double)numC % (double)gcd() != 0)
                Console.WriteLine("此題無解");
            else if (need > glass1 && need > glass2)
                Console.WriteLine("此題無解");
            else if (need == glass2)
            {
                water2 = glass2;
                Console.WriteLine("將第二杯水裝滿");
                Console.WriteLine("第一杯中有{0}公升水 第二杯中有{1}公升水\n", water1, water2);
                Console.WriteLine("此時第二杯中量即為所求");
            }       
            else
            {
                while (water1 != need && water2 != need)//在其中一杯之水量變成所需值前 持續迴圈
                {
                    if (water1 == 0)//第一杯中無水為第一種情況
                    {
                        water1 = glass1;
                        Console.WriteLine("將第一杯水裝滿");
                        Console.WriteLine("第一杯中有{0}公升水 第二杯中有{1}公升水\n", water1, water2);
                    }
                    else//第一杯中有水為另一種情況
                    {
                        if (water2 + water1 > glass2)//當將第一杯水全數倒入第二杯中會造成滿出來之情況
                        {
                            water1 = water1 - (glass2 - water2);
                            water2 = 0;
                            Console.WriteLine("將第一杯的水把第二杯裝滿後 \n將第二杯倒掉");
                            Console.WriteLine("第一杯中有{0}公升水 第二杯水中有{1}公升水\n", water1, water2);
                        }
                        else//第一杯水全數倒入第二杯中 不會造成滿出來之情況
                        {
                            water2 = water1 + water2;
                            water1 = 0;
                            Console.WriteLine("將第一杯的水全數倒入第二杯中");
                            Console.WriteLine("第一杯中有{0}公升水 第二杯中有{1}公升水\n", water1, water2);
                        }
                    }
                }
                if (water1 == need)//迴圈結束後判斷哪一杯水才是我們要的量
                    Console.WriteLine("此時第一杯中水量即為所求");
                else if(water2 == need)
                    Console.WriteLine("此時第二杯中量即為所求");
            }
        }
    }
}

沒有留言:

張貼留言