2015年3月26日 星期四
[2015][Homework]Team04 - Hw04
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JugPuzzle
{
class Program
{
static void Main(string[] args)
{
int capacityA;
int capacityB;
int gcd;
int target;
Console.WriteLine("Jug Puzzle!");
Console.WriteLine("Please input cylinderA capacity"); //key in
capacityA = int.Parse(Console.ReadLine());
Console.WriteLine("Please input cylinderB capacity");
capacityB = int.Parse(Console.ReadLine());
Console.WriteLine("Please input target capacity");
target = int.Parse(Console.ReadLine());
Console.WriteLine("*******************************************************");
gcd = Program.gcd(capacityA, capacityB); //find gcd
if (target % gcd == 0) //Is solvable?
{
if (capacityA + capacityB >= target)
{
Program.jugPuzzle(capacityA, capacityB, target);
}
else
{
Console.WriteLine("Not solvable!");
}
}
else
{
Console.WriteLine("Not solvable!");
}
Console.Read();
}
static int gcd(int m, int n) //最大公因數
{
int temp = 0;
while (n != 0)
{
temp = m % n;
m = n;
n = temp;
}
return m;
}
static void jugPuzzle(int capacityA, int capacityB, int target)
{
int tem;
int waterInA = 0;
int waterInB = 0;
if (capacityA > capacityB) //if capacityA>B, exchange each other
{
tem = capacityA;
capacityA = capacityB;
capacityB = tem;
Console.WriteLine("Capavity of B is smaller then capacity of A");
Console.WriteLine("Exchange: capavity of A is {0}(smaller), and capacity of B is {1}(larger)", capacityA, capacityB);
}
else if (capacityA < capacityB)
{
Console.WriteLine("Capavity of A is smaller than capacity of B");
}
else
{
Console.WriteLine("Capavity of A and capacity of B are same");
}
Console.WriteLine("*******************************************************");
while (true)
{
if (capacityA + capacityB == target) //if capacity A + capacity B = target
{
waterInA = capacityA;
waterInB = capacityB;
Console.WriteLine("Fill in cylinderA and cylinderB");
Console.WriteLine("cylinderA:({0}) cylinderB:({1})", waterInA, waterInB);
if (waterInA == target || waterInB == target || (waterInA + waterInB) == target)
{
break;
}
}
if (waterInA == 0) //if A is empty
{
waterInA = capacityA;
Console.WriteLine("Fill in cylinderA");
Console.WriteLine("cylinderA:({0}) cylinderB:({1})", waterInA, waterInB);
if (waterInA == target || waterInB == target || (waterInA + waterInB) == target)
{
break;
}
}
if (capacityB - waterInB > capacityA) //if A pour into B
{
waterInB = waterInB + waterInA;
waterInA = 0;
Console.WriteLine("CylinderA pour into cylinderB");
Console.WriteLine("cylinderA:({0}) cylinderB:({1})", waterInA, waterInB);
if (waterInA == target || waterInB == target || (waterInA + waterInB) == target)
{
break;
}
}
else
{
waterInA = waterInA - (capacityB - waterInB);
waterInB = capacityB;
Console.WriteLine("CylinderA pour into cylinderB");
Console.WriteLine("cylinderA:({0}) cylinderB:({1})", waterInA, waterInB);
if (waterInA == target || waterInB == target || (waterInA + waterInB) == target)
{
break;
}
}
if (waterInB == capacityB) //if B is full, pour out
{
waterInB = 0;
waterInB = waterInA;
waterInA = 0;
Console.WriteLine("CylinderB is full, pour out");
Console.WriteLine("And cylinderA pour into cylinderB");
Console.WriteLine("cylinderA:({0}) cylinderB:({1})", waterInA, waterInB);
if (waterInA == target || waterInB == target || (waterInA + waterInB) == target)
{
break;
}
}
}
Console.WriteLine("Done!");
}
}
}
[2015][Homework]Team03 - Hw01 (Revised)
namespace HW1
{
class Program
{
static void printArmstrongNumber()
{
int first, second, third,num;
for (int i = 100; i < 1000; i++)
{
first = i / 100;
second = i / 10 % 10;
third = i % 10;
num = first * first * first + second * second * second + third * third * third;
if (i == num)
Console.WriteLine(i);
}
}
static bool determineLeapYear(int year)//閏年 回傳True
{
if (((year % 400) == 0) || ((year % 4 == 0) && (year % 100 != 0)))
return true;
else return false;
}
static int countDayOfMonth(int year, int month)
{
if (month != 2)
{
int big = 1;
if (month <= 7)
{
if (month % 2 == 0) big = 0;
}
else
if (month % 2 == 1) big = 0;
if (big == 1) return 31;
else return 30;
}
else //2月
if (Program.determineLeapYear(year)) return 29;
else return 28;
}//回傳天數
static void findWeek(int year, int month, int day)
{
int Difference;
Difference = countDayBetweenOtherDay(1, 1, 1, year, month, day);
// Difference++;
if (Difference == -1) Console.WriteLine("星期1");
Difference = Difference % 7;
if (Difference == 0)
Console.WriteLine("星期2");
if (Difference == 1)
Console.WriteLine("星期3");
if (Difference == 2)
Console.WriteLine("星期4");
if (Difference == 3)
Console.WriteLine("星期5");
if (Difference == 4)
Console.WriteLine("星期6");
if (Difference == 5)
Console.WriteLine("星期天");
if (Difference == 6)
Console.WriteLine("星期1");
}
static bool determineDay(int year, int month, int day)//有效日期判斷
{
if ((month <= 12) && (month >= 1) && ((day <= countDayOfMonth(year, month)) && (day > 0))) return true;
else return false;
}
static int countDayBetweenOtherDay(int year, int month, int day, int year2, int month2, int day2)//回傳 兩日相差天數
{
int dayOffset = 0;//offset
for (int i = year2; i > year; i--)//年換算
{
if (determineLeapYear(i - 1))
dayOffset += 366;
else dayOffset += 365;
}
for (int i = month2; i > 1; i--)//月換算(轉成1/1)
dayOffset += countDayOfMonth(year2, i - 1);
for (int i = month; i > 1; i--)//月換算(轉成1/1)
dayOffset -= countDayOfMonth(year, i - 1);
return day2 + dayOffset -day - 1;
}
static void Main(string[] args)
{
string inputTemp;//input的暫存器
int choose;
int year;
int month;
int day;
int year2;
int month2;
int day2;
while(true)
{
#region input
Console.WriteLine("請輸入要測哪一題:");
inputTemp=Console.ReadLine();
choose = Convert.ToInt32(inputTemp);
#endregion
#region test1
if (choose == 1)
{
Console.WriteLine("請寫出可以列印出所有三位數(100~999)之『阿姆斯壯數』");
printArmstrongNumber();
}
#endregion
#region test2
else if (choose == 2)
{
Console.WriteLine("輸入西元年份,讓我幫你算算是不是閏年:");
inputTemp = Console.ReadLine();
year = Convert.ToInt32(inputTemp);
if (determineLeapYear(year)) Console.WriteLine("是閏年!");
else Console.WriteLine("是平年!");
}
#endregion
#region test3
else if (choose == 3)
{
Console.WriteLine("輸入西元年份及月份,讓我幫你算算該月有幾天:");
Console.WriteLine("請先輸入西元年份:");
inputTemp = Console.ReadLine();
year = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入月份:");
inputTemp = Console.ReadLine();
month = Convert.ToInt32(inputTemp);
Console.WriteLine(countDayOfMonth(year, month));
}
#endregion
#region test4
else if (choose == 4)
{
Console.WriteLine("輸入西元年份及月份和日期,讓我幫你算算是星期幾:");
Console.WriteLine("請先輸入西元年份:");
inputTemp = Console.ReadLine();
year = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入月份:");
inputTemp = Console.ReadLine();
month = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入日期:");
inputTemp = Console.ReadLine();
day = Convert.ToInt32(inputTemp);
findWeek(year, month, day);
}
#endregion
#region test5
else if (choose == 5)
{
Console.WriteLine("輸入西元年份及月份和日期,讓我幫你算算是不是合法日期:");
Console.WriteLine("請先輸入西元年份:");
inputTemp = Console.ReadLine();
year = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入月份:");
inputTemp = Console.ReadLine();
month = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入日期:");
inputTemp = Console.ReadLine();
day = Convert.ToInt32(inputTemp);
if (determineDay(year, month,day)) Console.WriteLine("合法!");
else
Console.WriteLine("不合法!");
}
#endregion
#region test6
else if (choose == 6)
{
Console.WriteLine("輸入兩個西元年份及月份和日期,讓我幫你算算總共差幾天:");
Console.WriteLine("請先輸入(起始)西元年份:");
inputTemp = Console.ReadLine();
year = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入(起始)月份:");
inputTemp = Console.ReadLine();
month = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入(起始)日期:");
inputTemp = Console.ReadLine();
day = Convert.ToInt32(inputTemp);
Console.WriteLine("請先輸入(結束)西元年份:");
inputTemp = Console.ReadLine();
year2 = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入(結束)月份:");
inputTemp = Console.ReadLine();
month2 = Convert.ToInt32(inputTemp);
Console.WriteLine("請輸入(結束)日期:");
inputTemp = Console.ReadLine();
day2 = Convert.ToInt32(inputTemp);
Console.WriteLine(countDayBetweenOtherDay(year, month, day, year2, month2, day2));
}
#endregion
else Console.WriteLine("不合法的輸入= =");
}
}
}
}
訂閱:
文章 (Atom)