该楼层疑似违规已被系统折叠隐藏此楼查看此楼
int 篮子数, 橘子数, 橘子占位, 全局模拟计数;
int[, ,] 快捷记录;
bool 优化;
string 全局结果 = "";
private void Form1_Load(object sender, EventArgs e)
{
篮子数 = 20;
橘子数 = 60;
橘子占位 = 橘子数.ToString().Length;
全局模拟计数 = 0;
快捷记录 = new int[Math.Min(篮子数, 橘子数) + 1, 橘子数 + 1, 橘子数 + 1];
string 结果文本 = "";
int[] 篮子情况 = new int[篮子数];
优化 = true;
int 优化后结果计数 = 递归(篮子情况.Length - 1, 橘子数, 篮子情况, 橘子数);
结果文本 += "模拟计数=" + 全局模拟计数.ToString() + "\r\n";
if (优化)
{
结果文本 += "优化后结果计数" + 优化后结果计数.ToString() + "\r\n";
}
结果文本 += 全局结果 + "\r\n";
textBox1.Text = 结果文本;
}
private int 递归(int 篮子号, int 剩余橘子数, int[] 篮子情况, int 前一个篮子)
{
int 本层计数 = 0;
if (前一个篮子 >= 剩余橘子数 &&
(篮子号 == 0 || 剩余橘子数 == 0))
{
篮子情况[篮子号] = 剩余橘子数;
/*输出篮子情况*/
全局结果 += 输出篮子情况(篮子情况) + "\r\n";
篮子情况[篮子号] = 0;
本层计数++;
}
else if (篮子号 > 0)
{
if (优化)
{
int 剩余篮数 = 篮子号 + 1;
剩余篮数 = Math.Min(剩余篮数, 剩余橘子数);
if (快捷记录[剩余篮数, 剩余橘子数, 前一个篮子] != 0)
{
//if (剩余篮数 > 0)
本层计数 += 快捷记录[剩余篮数, 剩余橘子数, 前一个篮子];
全局结果 += 输出篮子情况(篮子情况) + "+ 快捷 " +
剩余篮数.ToString() + "," +
剩余橘子数.ToString() + "," +
前一个篮子.ToString() + "=" +
快捷记录[剩余篮数, 剩余橘子数, 前一个篮子].ToString() + "\r\n";
}
else
{
for (int i = Math.Min(前一个篮子, 剩余橘子数); i >= 1; i--)
{
篮子情况[篮子号] = i;
本层计数 += 递归(篮子号 - 1, 剩余橘子数 - i, 篮子情况, 篮子情况[篮子号]);
}
快捷记录[剩余篮数, 剩余橘子数, 前一个篮子] = 本层计数;
}
}
else
{
for (int i = Math.Min(前一个篮子, 剩余橘子数); i >= 1; i--)
{
篮子情况[篮子号] = i;
本层计数 += 递归(篮子号 - 1, 剩余橘子数 - i, 篮子情况, 篮子情况[篮子号]);
}
}
篮子情况[篮子号] = 0;
}
return 本层计数;
}
private string 输出篮子情况(int[] 篮子情况)
{
string 文本 = "";
for (int i = 0; i < 篮子情况.Length; i++)
{
文本 += 篮子情况[i].ToString().PadLeft(橘子占位, ' ') + " ";
}
全局模拟计数++;
return 文本;
}