//面值为2^k的硬币变种硬币找零方案数问题https://bbs.csdn.net/topics/394540500
int 数 = 16, 序 = 0, 递 = 0, 退 = 0, 求 = 0;
string 显示所有方案 = 数.ToString() + "=";
List<int> 近似 = 阶乘近似(数), 方案 = new List<int>();
递 = 序 = 近似.Count - 1;
do
{
序 = 递;
续:
while (数 > 求)
{
求 += 近似[序];
方案.Add(近似[序]);
if (数 == 求)
{
退 = 序;
break;
}
if (数 < 求)
{
求 -= 近似[序];
方案.Remove(近似[序]);
退 = --序;
}
}
方案.Sort();
显示所有方案 += string.Join(" ", 方案) + "|";
if (退 > 0)
{
求 -= 近似[序];
方案.Remove(近似[序]);
//方案 = 方案.Distinct().ToList();
//求 = 方案.Sum();
//if (方案.Count > 1) 方案.RemoveAll(aa => aa == 近似[序]);
序 = --退;
goto 续;
}
else
{
求 = 0;
方案.Clear();
}
} while (--递 > 0);
MessageBox.Show(显示所有方案);