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)
{
int sele;
while (true)
{
Console.WriteLine("請輸入1或2執行第一題或第二題");
Console.WriteLine("若要結束程式請輸入其他數字");
sele = int.Parse(Console.ReadLine());
switch (sele)
{
case 1:
int kGcd;
Console.WriteLine("若 a, b 為整數, 求ax+by=c的整數解。");
Console.WriteLine("請輸入一個整數a");
int a = int.Parse(Console.ReadLine());
Console.WriteLine("請輸入一個整數b");
int b = int.Parse(Console.ReadLine());
Console.WriteLine("請輸入一個整數c");
int c = int.Parse(Console.ReadLine());
//演算步驟一 計算 a, b 的最大公因數
int aCopy = a;
int bCopy = b;
int temp;
if (a > b)
{
while(aCopy % bCopy != 0)
{
temp = aCopy % bCopy;
aCopy = bCopy;
bCopy = temp;
}
kGcd = bCopy;
}
else
{
while(bCopy % aCopy != 0)
{
temp = bCopy % aCopy;
bCopy = aCopy;
aCopy = temp;
}
kGcd = aCopy;
}
Console.WriteLine("最大公因數={0}",kGcd);
//演算步驟二 設(a, b) = k, 若 c 不為 k 的倍數, 則無解。
if (c % kGcd != 0)
{
Console.WriteLine("無解");
Console.ReadLine();
Console.Clear();
break;
}
//演算步驟三 若 c = kc’
a /= kGcd;
b /= kGcd;
c /= kGcd;
//演算步驟四 求特殊解
int x = 0;
int y = 0;
for (y = 0; y <= a; y++)
{
if ((c - b * y) % a == 0)
{
x = (c - b * y) / a;
break;
}
}
//演算步驟五 通解
int t;
for (t = 0; t < 10; t++)
{
Console.WriteLine("x={0,3},y={1,3}", x, y);
x += b;
y -= a;
}
Console.ReadKey();
Console.Clear();
break;
case 2:
int aContainer = 3;
int bContainer = 5;
int aWater = 0;
int bWater = 0;
int step = 0;
Console.WriteLine("一開始,A桶有水{0}公升,B桶有水{1}公升\n", aWater, bWater);
while (bWater != 4)
{
step++;
if (bWater == 0)
{
bWater = bContainer;
Console.WriteLine("step{0}:把B桶裝滿水\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, aWater, bWater);
}
else if (aWater >= 3)
{
aWater = 0;
Console.WriteLine("step{0}:A桶水滿,把A桶的水全部倒掉\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, aWater, bWater);
}
else if (aWater + bWater >= aContainer)
{
bWater = aWater + bWater - aContainer;
aWater = aContainer;
Console.WriteLine("step{0}:將B桶的水倒滿A桶\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, aWater, bWater);
}
else if (aWater + bWater != 4)
{
aWater = aWater + bWater;
bWater = 0;
Console.WriteLine("step{0}:將B桶的水倒滿A桶\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, aWater, bWater);
}
else//bWater+aWater=4
{
bWater = aWater + bWater;
aWater = 0;
Console.WriteLine("step{0}:將A桶的水倒回B桶\n此時,A桶有水{1}公升,B桶有水{2}公升\n", step, aWater, bWater);
}
}
Console.WriteLine("最後,A桶有水{0}公升,B桶有水{1}公升\n", aWater, bWater);
Console.WriteLine("B桶有水{0}公升放在啟動開關上,解除炸彈", bWater);
Console.ReadLine();
Console.Clear();
break;
default:
return;
}
}
}
}
}
2015年3月26日 星期四
[2015][Homework]Team02 - Hw02
訂閱:
張貼留言 (Atom)
作者已經移除這則留言。
回覆刪除應將題目一般化
回覆刪除1. A, B 兩容器若是任意值
2. 目標水量也是任意值
變數進行以下修正會比較容易閱讀
回覆刪除kGcd ==> gcd
aContainer ==> containerA
aWater ==> currentCapacityA