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("此時第二杯中量即為所求");
}
}
}
}
沒有留言:
張貼留言