Ter*_*ich 7 php puzzle math numbers subset-sum
假设我想找到所有5个单位数,非重复数的集合,最多可加30个...我最终会得到[9,8,7,5,1],[9,8,7] ,4,2],[9,8,6,4,3],[9,8,6,5,2],[9,7,6,5,3]和[8,7,6, 5,4].这些集合中的每一个都包含5个非重复数字,最多可加30,即给定的总和.
任何帮助将不胜感激.即使只是我使用的起点也会很棒.
我提出了一种方法,这似乎是一个很长的路要走:得到所有唯一的5位数字(12345,12346,12347等),加上数字,看它是否等于给定的总和(例如30).如果是,请将其添加到可能的匹配集列表中.
我这样做是为了个人项目,这将帮助我解决Kakuro难题,而不是立即解决整个问题.是的,它可能是作弊,但它......不是那么糟糕......:P
function sumOfDigits($num) {
$str = "{$num}";
$sum = 0;
for ($i=0;$i<strlen($str);$i++) {
$sum += (int)substr($str, $i, 1);
}
return $sum;
}
function hasDuplicateDigits($num) {
$str = "{$num}";
$pieces = array();
for ($i=0;$i<strlen($str);$i++) {
$pieces[] = substr($str, $i, 1);
}
return (count(array_unique($pieces)) != strlen($str));
}
// if you prefer the opposite function
function hasAllUniqueDigits($num) {
return (!hasDuplicateDigits($num));
}
$numbers = range(10000, 99999);
foreach ($numbers as $num) {
if ( !hasDuplicateDigits($num) && (sumOfDigits($num) == 30)) {
print $num . "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4211 次 |
| 最近记录: |