Form
using System;
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 WaterJugForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSolve_Click(object sender, EventArgs e)
{
JugPuzzle jug = new JugPuzzle();
jug.CapacityA = int.Parse(txtCapacityA.Text);
jug.CapacityB = int.Parse(txtCapacityB.Text);
jug.goal = int.Parse(txtTarget.Text);
jug.message = txtSolve;
jug.Jug();
}
private void btnClear_Click(object sender, EventArgs e)
{
txtSolve.Text = null;
}
}
}
JugPuzzle
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WaterJugForm
{
class JugPuzzle
{
public int CapacityA;
public int CapacityB;
public int currentVolumeA;
public int currentVolumeB;
public int goal;
public int changeCount = 0;
public TextBox message;
public int Gcd(int a, int b)
{
int temp;
while(a!=0)
{
if(a CapacityA)
{
Pour();
}
return true;
}
else
{
return false;
}
}
public void Discard()
{
if(currentVolumeA == CapacityA)
{
currentVolumeA = 0;
}
if (changeCount == 1)
{
message.Text += "將容器B的水倒光";
message.Text += Environment.NewLine;
message.Text += "(A,B)=(" + currentVolumeB + "," + currentVolumeA + ")";
}
else
{
message.Text += "將容器A的水倒光";
message.Text += Environment.NewLine;
message.Text += "(A,B)=(" + currentVolumeA + "," + currentVolumeB + ")";
}
message.Text += "=======================================";
message.Text += Environment.NewLine;
}
public void Balance()
{
if(currentVolumeA == 0)
{
if (changeCount == 1)
{
message.Text += "將容器A放在磅秤上,即為所求!";
}
else
{
message.Text += "將容器B放在磅秤上,即為所求!";
}
}
else if (currentVolumeB == 0)
{
if (changeCount == 1)
{
message.Text += "將容器B放在磅秤上,即為所求!";
}
else
{
message.Text += "將容器A放在磅秤上,即為所求!";
}
}
else
{
message.Text += "將容器A和B放在磅秤上,即為所求!";
}
}
public void Jug()
{
message.Text = null;
message.Text = "開始進行分水步驟!";
message.Text += "=======================================";
message.Text += Environment.NewLine;
if (CheckInput() == true)
{
change();
while (true)
{
Inject();
if (CheckGoal() == true) { break; }
Pour();
Inject();
if (CheckGoal() == true) { break; }
Pour();
Discard();
if (CheckGoal() == true) { break; }
Pour();
}
message.Text += Environment.NewLine;
Balance();
message.Text += Environment.NewLine;
message.Text += "炸彈解除!";
}
else
{
message.Text = "無解,你被唬了,Boom!";
}
}
}
}
CalenderForm
using System;
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 Calender
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnDo_Click(object sender, EventArgs e)
{
if(rBtnLeapCheck.Checked == true)
{
MyDateTime myDateTime = new MyDateTime(int.Parse(txtYear.Text), 0, 0);
myDateTime.message = txtResult;
myDateTime.ShowLeap();
}
else if (rBtnDateCheck.Checked == true)
{
MyDateTime myDateTime = new MyDateTime(int.Parse(txtYear.Text),cBoxMonth.SelectedIndex + 1,cBoxDate.SelectedIndex + 1);
myDateTime.message = txtResult;
myDateTime.IsLegalDate();
}
else if (rBtnDateToWeek.Checked == true)
{
MyDateTime myDateTime = new MyDateTime(int.Parse(txtYear.Text), cBoxMonth.SelectedIndex + 1, cBoxDate.SelectedIndex + 1);
myDateTime.message = txtResult;
myDateTime.DateToWeek();
}
else if (rBtnCalender.Checked == true)
{
MyDateTime myDateTime = new MyDateTime(int.Parse(txtYear.Text), cBoxMonth.SelectedIndex + 1 , 0);
myDateTime.message = txtResult;
myDateTime.Calender();
}
}
private void btnClear_Click(object sender, EventArgs e)
{
txtResult.Clear();
}
}
}
MyDateTime
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Calender
{
class MyDateTime
{
private int _year;
private int _month;
private int _date;
public int Year
{
get { return _year; }
set { _year = value; }
}
public int Month
{
get { return _month; }
set { _month = value; }
}
public int Date
{
get { return _date; }
set { _date = value; }
}
public MyDateTime()
{
this.Year = 0;
this.Month = 0;
this.Date = 0;
}
public MyDateTime(int year,int month,int date)
{
this.Year = year;
this.Month = month;
this.Date = date;
}
public TextBox message;
public int GaussianAlgorithm()
{
int week;
int tempYear = Year;
double tempMonth = (double)Month;
if (Month == 1 || Month == 2)
{
tempYear -= 1;
}
tempMonth = (tempMonth + 9) % 12 + 1;
week = (Date + Convert.ToInt32(Math.Floor((2.6 * tempMonth) - 0.2)) + tempYear%100 + (tempYear%100)/4 + (tempYear/100)/4 - 2*(tempYear/100) ) % 7 ;
if (week >= 0)
{
return week;
}
else
{
return week +7;
}
}
public int GaussianAlgorithm(int day)
{
int week = 0;
int tempYear = Year;
double tempMonth = (double)Month;
int tempDate = day;
if (Month == 1 || Month == 2)
{
tempYear -= 1;
}
tempMonth = (tempMonth + 9) % 12 + 1;
week = (tempDate + Convert.ToInt32(Math.Floor(2.6 * tempMonth - 0.2)) + tempYear%100 + (tempYear%100)/4 + (tempYear/100)/4 - 2*(tempYear/100) ) % 7 ;
if (week >= 0)
{
return week;
}
else
{
return week + 7;
}
}
public bool IsLeap()
{
if(Year % 400 == 0 || (Year % 4 ==0 & Year % 100 !=0))
{
return true;
}
else
{
return false;
}
}
public void ShowLeap()
{
if(IsLeap() == true)
{
message.Text += Year + "是閏年" ;
}
else
{
message.Text += Year + "是平年";
}
message.Text += Environment.NewLine;
}
public int MonthMaxDate()
{
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() == true)
{
return 29;
}
else
{
return 28;
}
default:
return 0;
}
}
public void IsLegalDate()
{
if(Date>0 & Date <=MonthMaxDate())
{
message.Text += Year + "/" + Month + "/" + Date + "合法";
}
else
{
message.Text += Year + "/" + Month + "/" + Date + "不合法";
}
message.Text += Environment.NewLine;
}
public void DateToWeek()
{
message.Text += Year + "/" + Month + "/" + Date +"是星期";
switch(GaussianAlgorithm())
{
case 0:
message.Text += "日";
break;
case 1:
message.Text += "一";
break;
case 2:
message.Text += "二";
break;
case 3:
message.Text += "三";
break;
case 4:
message.Text += "四";
break;
case 5:
message.Text += "五";
break;
case 6:
message.Text += "六";
break;
}
message.Text += Environment.NewLine;
}
public void Calender()
{
message.Text = "\tSun\tMon\tTue\tWed\tThr\tFri\tSat";
message.Text += Environment.NewLine;
for (int i = 0; i <= GaussianAlgorithm(1); i++ )
{
message.Text += "\t";
}
for(int i=1; i<=MonthMaxDate(); i++)
{
message.Text += i + "\t";
if(GaussianAlgorithm(i) == 6)
{
message.Text += Environment.NewLine;
message.Text += "\t";
}
}
message.Text += Environment.NewLine;
}
}
}
JugPuzzle內的CapacityA,CapacityB字首要小寫喔(因為這邊它們都是欄位不是屬性)
回覆刪除小提醒: JugPuzzle這一段120行出現是因為25行的判斷式. 在小於的符號兩側各加一格空白應該就能消掉了
建議:屬性內的set可以再搭配一些判斷式來檢查輸入參數是否合法,檢查合法之後才設定參數,否則就設為null。
回覆刪除