2015年3月25日 星期三

[2015][Homework]Team05 - Hw02

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

namespace homework2
{
    class Program
    {
        static void Main(string[] args)
        {
            //第一題
            int numA;
            int numB;
            int numC;
            Console.WriteLine("輸入A值");
            numA = int.Parse(Console.ReadLine());
            Console.WriteLine("輸入B值");
            numB = int.Parse(Console.ReadLine());
            Console.WriteLine("輸入C值");
            numC = int.Parse(Console.ReadLine());//輸入ABC三值
            int tempA=numA;
            int tempB=numB;
            int mod = tempA % tempB;//宣告暫存變數 mod為輾轉相除法運算用
            while (mod > 0)
            {
                tempA = tempB;
                tempB = mod;
                mod = tempA % tempB;
            }
            int GCD = tempB;//GCD為最大公因數之縮寫
            if (numC % GCD != 0)
            {
                Console.WriteLine("此題無解");
                Console.ReadKey();
                return;//當C無法被最大公因數整除時結束程式
            }
            tempA = numA / GCD;
            tempB = numB / GCD;
            int tempC = numC / GCD;
            double X = 0;
            int Y = 0;
            for (Y = 0; Y <= numA; Y++)
            {
                X = ((double)tempC - (double)(tempB * Y)) / (double)tempA;//因X為浮點數 計算過程需要資料轉型 
                if (X % 1 == 0)
                    break;//當X整除1時代表X為整數 即跳脫迴圈 不再進行運算
            }
            Console.WriteLine("通解為");
            Console.WriteLine("X={0}+{1}t", X, tempB);
            Console.WriteLine("Y={0}-{1}t", Y, tempA);
            Console.WriteLine("t為整數");
            Console.ReadKey();
            //第二題
            int glassOne = 3; 
            int glassTwo = 5;
            int need = 4;//宣告兩杯子之容量以及所需要之水量
            int waterOne = 0;
            int waterTwo = 0;//宣告兩杯中水量
            while (waterOne != need && waterTwo != need)//在其中一杯之水量變成所需值前 持續迴圈
            {
                if (waterOne == 0)//第一杯中無水為第一種情況
                {
                    waterOne = glassOne;
                    Console.WriteLine("將第一杯水裝滿");
                    Console.WriteLine("第一杯中有{0}公升水 第二杯中有{1}公升水\n", waterOne, waterTwo);
                }
                else//第一杯中有水為另一種情況
                {
                    if (waterTwo + waterOne > glassTwo)//當將第一杯水全數倒入第二杯中會造成滿出來之情況
                    {
                        waterOne = waterOne - (glassTwo - waterTwo);
                        waterTwo = 0;
                        Console.WriteLine("用第一杯的水將第二杯裝滿後 將第二杯倒掉");
                        Console.WriteLine("第一杯中有{0}公升水 第二杯水中有{1}公升水\n", waterOne, waterTwo);
                    }
                    else//第一杯水全數倒入第二杯中 不會造成滿出來之情況
                    {
                        waterTwo = waterOne + waterTwo;
                        waterOne = 0;
                        Console.WriteLine("將第一杯的水全數倒入第二杯中");
                        Console.WriteLine("第一杯中有{0}公升水 第二杯中有{1}公升水\n", waterOne, waterTwo);
                    }
                }
            }
            if (waterOne == need)//迴圈結束後判斷哪一杯水才是我們要的量
                Console.WriteLine("此時第一杯中水量即為所求");
            else
                Console.WriteLine("此時第二杯中量即為所求");
            Console.ReadKey();
        }
    }
}

1 則留言:

  1. GCD==>gcd
    glassOne ==> glass1

    分水遊戲應該一般化
    容器的容量是任意的, 目標水量適任意的

    回覆刪除