using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinJugPuzzle
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btn_solve_Click(object sender, EventArgs e)
{
JugPuzzle jug=new JugPuzzle();
jug.Message = txt_Message;
jug.CupOfJugA=Convert.ToInt16(txt_CupOfJugA.Text);
jug.CupOfJugB=Convert.ToInt16(txt_CupOfJugB.Text);
jug.Target=Convert.ToInt16(txt_Target.Text);
jug.solve();
}
private void btn_Clear_Click(object sender, EventArgs e)
{
txt_Message.Text = "";
}
}
}
JugPuzzle.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WinJugPuzzle
{
class JugPuzzle
{
public int CupOfJugA;
public int CupOfJugB;
public int Target;
public TextBox Message;
public int CupA=0;
public int CupB=0;
public void solve()
{
if(!IsSolved(CupOfJugA,CupOfJugB))//檢查有沒有解答
{
Message.AppendText("無解,你被唬了,Boom\n");
return;
}
Message.AppendText("開始進行分水步驟\n");
Message.AppendText("====================\n");
while(true)
{
if (CupA==0)//位置:容器A沒水,容器B不管他
{
CupA+=CupOfJugA;
Message.AppendText("將容器A裝滿\n");
Action();
if(Target==CupA||(CupA+CupB)==Target)
{
break;
}
//到達:容器A水滿,容器B不管他
}
else if(CupA==CupOfJugA)//位置:容器A水滿,容器B不管他
{
if(CupA<=(CupOfJugB-CupB))//
{
CupB+=CupA;
CupA=0;
Message.AppendText("將容器A倒進容器B\n");
Action();
}
else if(CupA>(CupOfJugB-CupB))
{
CupA-=(CupOfJugB-CupB);
CupB=CupOfJugB;
Message.AppendText("將容器A的水道進容器B,直到B滿為止\n");
Action();
}
}
else if(CupB==CupOfJugB)
{
CupB=0;
Message.AppendText("將容器B的水倒光\n");
Action();
if(Target==CupA||(CupA+CupB)==Target)
{
break;
}
}
else if(CupA!=0&&CupB==0)
{
if(CupA<=(CupOfJugB-CupB))
{
CupB+=CupA;
CupA=0;
Message.AppendText("將容器A倒進容器B\n");
Action();
}
else if(CupA>(CupOfJugB-CupB))
{
CupA-=(CupOfJugB-CupB);
CupB=CupOfJugB;
Message.AppendText("將容器A的水道進容器B,直到B滿為止\n");
Action();
}
}
}
Message.AppendText("**********************\n");
Message.AppendText("**********************\n");
Message.AppendText("將容器A與一起放在磅秤上,即為所求炸彈拆除");
}
public double gcd(int Num1, int Num2)
{
if (Num1 % Num2 == 0)
{
return Num2;
}
return gcd(Num2, (Num1 % Num2));
}
public bool IsSolved(int CupOfJugA, int CupOfJugB)
{
if (Target % gcd(CupOfJugA, CupOfJugB) != 0 || (CupOfJugA + CupOfJugB) < Target)
{
return false;
}
else
return true;
}
public void Action()
{
Message.AppendText("(A,B)=("+CupA.ToString()+','+CupB.ToString()+')');
Message.AppendText("\n");
Message.AppendText("====================================\n");
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace exam_2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void lal_year_Click(object sender, EventArgs e)
{
}
private void lal_month_Click(object sender, EventArgs e)
{
}
private void lal_day_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void btn_run_Click(object sender, EventArgs e)
{
MyDAteTime mdt = new MyDAteTime();
mdt._year = int.Parse(txt_year.Text);
mdt._month = Convert.ToInt16( cob_month.SelectedItem.ToString());
mdt._Day = Convert.ToInt16(cob_day.SelectedItem.ToString());
string str = "";
if (rbtn_IsLeap.Checked)
{
str = Convert.ToString(mdt._year);
if (!mdt.IsLeap())
{
txt_Display.Text = str + "年是平年";
}
else
{
txt_Display.Text = str + "年是閏年";
}
}
if (rbtn_CheckDay.Checked)
{
str = "";
if (mdt.IsValid())
{
str += mdt.Print();
str += "合法";
txt_Display.Text = str;
}
else
{
str += mdt.Print();
str += "不合法";
txt_Display.Text = str;
}
}
/*if (rbtn_DatToWeek.Checked)
{
str += mdt.Print();
switch (mdt.WeekDay())
{
case 0:
str += "星期一";
break;
case 1:
str += "星期二";
break;
case 2:
str += "星期三";
break;
case 3:
str += "星期四";
break;
case 4:
str += "星期五";
break;
case 5:
str += "星期六";
break;
case 6:
str += "星期日";
break;
default:
str += "";
break;
}
txt_Display.Text = str;
}*/
}
private void btn_clear_Click(object sender, EventArgs e)
{
txt_Display.Text = "";
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class MyDAteTime
{
public int _year;
public int _month;
public int _Day;
public bool IsLeap()
{
if ((_year % 4 == 0 && _year % 100 != 0 )|| _year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
public bool IsValid()
{
if (_Day <= DaysOfMonth())
{
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 2:
if (IsLeap())
{
return 29;
}
else
{
return 28;
}
case 4:
case 6:
case 9:
case 11:
{
return 30;
}
default:
return 0;
}
}
public string Print()
{
string str = "";
str += _year.ToString();
str += '/';
str += _month.ToString();
str += '/';
str += _Day.ToString();
return str;
}
public int WeekDay()
{
int Y = _year;
int d = _Day;
int m = _month;
double w;
if (m == 1 || m == 2)
{
Y -= 1;
}
double y = Y % 100;
double c = Y / 100;
w = (d + Convert.ToInt16(Math.Floor(2.6 * m - 0.2)) + y + Convert.ToInt16(Math.Floor(y / 4)) + Convert.ToInt16(Math.Floor( c/ 4))-Convert.ToInt16( 2*c))/7;
if (w < 0)
{
w += 7;
return Convert.ToInt16(w);
}
else
{
return Convert.ToInt16(w);
}
}
}
第二次考試:
回覆刪除MyDAteTime.cs注意命名,改為MyDateTime.cs會比較好
private field使用_camelCase,public field使用PascalCase
所以這裡的"_year, _month, _day"最好改為private,並搭配attribute來提供外界存取