jug 視窗主程式
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
JugPuzzle jug= new JugPuzzle();
public Form1()
{
InitializeComponent();
jug.message = txtMessage;
}
private void btnSolve_Click(object sender, EventArgs e)
{
jug.volumeA = Convert.ToInt32(txtVolumeA.Text);
jug.volumeB = Convert.ToInt32(txtVolumeB.Text);
jug.target = Convert.ToInt32(txtTargrt.Text);
if (jug.volumeA <= 0 || jug.volumeB <= 0 || jug.target <= 0)
{
txtMessage.AppendText("不得輸入零以下之數字!");
return;
}
if (jug.target % jug.Gcd(jug.volumeA, jug.volumeB) != 0)
{
txtMessage.AppendText("無解,炸彈無法解除!");
return;
}
jug.Solve();
}
private void btnClear_Click(object sender, EventArgs e)
{
txtMessage.Clear();
}
}
}
JugPuzzle 分水遊戲類別
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
class JugPuzzle
{
public int volumeA;
public int volumeB;
public int target;
public TextBox message;
public int Gcd(int num1,int num2)
{
int tempA=num1;
int tempB=num2;
int tempC;
if (num2 > num1)
{
num1=tempB;
num2=tempA;
}
while(tempA%tempB!=0)
{
tempC = tempB;
tempB=tempA%tempB;
tempA = tempC;
}
return tempB;
}
void showAB(int num1,int num2)
{
message.AppendText("(A,B)=(");
message.AppendText(Convert.ToString(num1));
message.AppendText(",");
message.AppendText(Convert.ToString(num2));
message.AppendText(")\n");
}
public void Solve()
{
int capacityA = 0;
int capacityB = 0;
message.AppendText("開始進行分水步驟\n");
if(volumeA+volumeB volumeB)
{
capacityA = capacityA - (volumeB - capacityB);
capacityB = volumeB;
message.AppendText("將容器A的水倒入進容器B,直到容器B滿為止\n");
showAB(capacityA, capacityB);
}
else
{
capacityB = capacityB + capacityA;
capacityA = 0;
message.AppendText("將容器A的水倒入進容器B\n");
showAB(capacityA, capacityB);
}
}
if (capacityA == target)
message.AppendText("將容器A放在磅秤上,即為所求\n");
else if (capacityB == target)
message.AppendText("將容器B放在磅秤上,即為所求\n");
else
message.AppendText("將容器A與B一起放在磅秤上,即為所求\n");
message.AppendText("炸彈解除!\n");
return;
}
}
}
}
第二題 MyDateTime之類別
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ntnuoop_Midterm2
{
class MyDateTime
{
private int _year;
private int _month;
private int _day;
public int year
{
get { return _year; }
set { _year = value; }
}
public int month
{
get { return _month; }
set { _month = value; }
}
public int day
{
get { return _day; }
set { _day = value; }
}
private string display;
public TextBox message;
public MyDateTime()
{
this._year=2000;
this._month=1;
this._day=1;
}
public MyDateTime(int year,int month,int day,TextBox message)
{
this._year = year;
this._month = month;
this._day = day;
this.message = message;
}
public bool IsLeap()
{
if ((_year % 4 == 0 && _year % 100 != 0) || _year % 400 == 0)
return true;
else
return false;
}
public int DaysOfMonth()
{
switch (_month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
if (IsLeap())
return 29;
else
return 28;
default:
return 0;
}
}
public bool IsValid()
{
if (_day <= DaysOfMonth())
return true;
else
return false;
}
public int WeekDay()
{
int fakeYear=_year;
if (_month == 1 || _month == 2)
fakeYear = fakeYear - 1;
int y=fakeYear%100;
int c=fakeYear/100;
int m=_month-2;
if (m < 0)
m += 12;
int w = (_day + (int)Math.Floor(2.6 * m - 0.2) + y + y / 4 + c / 4 - 2 * c) % 7;
if (w<0)
return w+7;
else
return w;
}
public string Print()
{
return _year + "/" + _month + "/" + _day;
}
public void CheckLeap()
{
display = Print();
if (IsLeap())
{
display +="是閏年";
message.AppendText(display);
}
else
{
display += "是平年";
message.AppendText(display);
}
}
public void CheckDate()
{
display = Print();
if(IsValid())
{
display += "合法";
message.AppendText(display);
}
else
{
display += "不合法";
message.AppendText(display);
}
}
public void CheckWeekDay()
{
display=Print();
switch (WeekDay())
{
case 0:
display += "是星期日";
message.AppendText(display);
break;
case 1:
display += "是星期一";
message.AppendText(display);
break;
case 2:
display += "是星期二";
message.AppendText(display);
break;
case 3:
display += "是星期三";
message.AppendText(display);
break;
case 4:
display += "是星期四";
message.AppendText(display);
break;
case 5:
display += "是星期五";
message.AppendText(display);
break;
case 6:
display += "是星期六";
message.AppendText(display);
break;
default:
break;
}
}
public void Calender()
{
_day = 1;
int firstWeekDay=WeekDay();
display = "\tSun\tMon\tTue\tWed\tThr\tFri\tSat\r\n";
for (int i = 0; i < WeekDay(); i++)
display += "\t";
for (int j=firstWeekDay;j<(DaysOfMonth()+firstWeekDay);j++)
{
display += "\t" + _day.ToString();
if ((j + 1) % 7 == 0)
display += "\r\n";
day++;
}
message.AppendText(display);
}
}
}
視窗主程式
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace ntnuoop_Midterm2
{
public partial class Form1 : Form
{
MyDateTime date = new MyDateTime();
public Form1()
{
InitializeComponent();
date.message = txt_Output;
}
private void btnRun_Click(object sender, EventArgs e)
{
date=new MyDateTime(int.Parse(txt_Year.Text), cbox_Month.SelectedIndex, cbox_Day.SelectedIndex,txt_Output);
if (rbtn_Leap.Checked)
date.CheckLeap();
else if (rbtn_IsDate.Checked)
date.CheckDate();
else if (rbtn_Weekday.Checked)
date.CheckWeekDay();
else if (rbtn_Calender.Checked)
date.Calender();
}
private void btn_Clear_Click(object sender, EventArgs e)
{
txt_Output.Clear();
}
}
}
JugPuzzle內的showAB()因為是方法,所以字首最好改成大寫喔
回覆刪除Gcd因為是縮寫,所以改成全部大寫的GCD會比較好