一个算法的小问题
想求一个算法,比如我知道一个数 是 13 然后我需要随机从 0-9 的10个数字中取 3个数 3个数的和就是 13,比如可以是 5+5+3 也可以是 3+5+5 或 5+3+5 6+2+5 可以重复 位置顺序也不固定。
php 怎么实现呢。
回复讨论(解决方案)
既然有最终值的要求,就不能三个数都随机了吧,最多只能随机一个数,其他的从余值范围的数值中在次随机取
$num = 13;$a = array_merge(range(0, 9), range(0, 9), range(0, 9));$loop = 10;while($loop--) { shuffle($a); foreach(array_chunk($a, 3) as $v) if(array_sum($v) == $num) echo join(' + ', $v), PHP_EOL;}
8 + 2 + 32 + 7 + 49 + 1 + 32 + 6 + 50 + 4 + 92 + 7 + 44 + 8 + 15 + 8 + 08 + 4 + 19 + 0 + 4
$num = 13;$a = array_merge(range(0, 9), range(0, 9), range(0, 9));$loop = 10;while($loop--) { shuffle($a); foreach(array_chunk($a, 3) as $v) if(array_sum($v) == $num) echo join(' + ', $v), PHP_EOL;}
8 + 2 + 32 + 7 + 49 + 1 + 32 + 6 + 50 + 4 + 92 + 7 + 44 + 8 + 15 + 8 + 08 + 4 + 19 + 0 + 4
这个会有重复的
楼主说过: 可以重复 位置顺序也不固定
$num = 13;$a = array_merge(range(0, 9), range(0, 9), range(0, 9));$loop = 10;while($loop--) { shuffle($a); foreach(array_chunk($a, 3) as $v) if(array_sum($v) == $num) echo join(' + ', $v), PHP_EOL;}
8 + 2 + 32 + 7 + 49 + 1 + 32 + 6 + 50 + 4 + 92 + 7 + 44 + 8 + 15 + 8 + 08 + 4 + 19 + 0 + 4
这个会有重复的
$num = 13;$a = array_merge(range(0, 9), range(0, 9), range(0, 9));$loop = 10;while($loop--) { shuffle($a); foreach(array_chunk($a, 3) as $v) if(array_sum($v) == $num) echo join(' + ', $v), PHP_EOL;}
8 + 2 + 32 + 7 + 49 + 1 + 32 + 6 + 50 + 4 + 92 + 7 + 44 + 8 + 15 + 8 + 08 + 4 + 19 + 0 + 4
这个会有重复的
楼主说过: 可以重复 位置顺序也不固定
$num = 13;$a = array_merge(range(0, 9), range(0, 9), range(0, 9));$loop = 10;while($loop--) { shuffle($a); foreach(array_chunk($a, 3) as $v) if(array_sum($v) == $num) echo join(' + ', $v), PHP_EOL;}
8 + 2 + 32 + 7 + 49 + 1 + 32 + 6 + 50 + 4 + 92 + 7 + 44 + 8 + 15 + 8 + 08 + 4 + 19 + 0 + 4
这个会有重复的
$num = 13;$a = array_merge(range(0, 9), range(0, 9), range(0, 9));$loop = 10;while($loop--) { shuffle($a); foreach(array_chunk($a, 3) as $v) if(array_sum($v) == $num) echo join(' + ', $v), PHP_EOL;}
8 + 2 + 32 + 7 + 49 + 1 + 32 + 6 + 50 + 4 + 92 + 7 + 44 + 8 + 15 + 8 + 08 + 4 + 19 + 0 + 4
这个会有重复的
-------------------------------
如果不重复该如何写?想了下,没想出来
$num = 13;$a = array_merge(range(0, 9), range(0, 9), range(0, 9));$loop = 10;while($loop--) { shuffle($a); foreach(array_chunk($a, 3) as $v) if(array_sum($v) == $num) echo join(' + ', $v), PHP_EOL;}
8 + 2 + 32 + 7 + 49 + 1 + 32 + 6 + 50 + 4 + 92 + 7 + 44 + 8 + 15 + 8 + 08 + 4 + 19 + 0 + 4
=====================
<?php $sum = 13; for($a=0; $a<10; $a++){ for($b=0; $b<10; $b++){ $c = $sum-$a-$b; if($c<10 && $c>0){ echo $a.' + '.$b.' + '.$c,PHP_EOL; } } } ?>
这样写效率是不是很差?
其实你都没描述清楚你的需求:
你是只需要随机出一个结果就好呢?还是要列出所有可能?或者其它指定个结果?
只需要一个随机的组合就行了
3个数可以重复出现
function number($num){ if( $num == 0 ) return array(0, 0, 0); if( $num == 27 ) return array(9, 9, 9); $data = array(); $oneMax = ( $num > 10 ) ? 9 : $num; $oneMin = ($num > 18) ? ($num - 18) : 0; $data[0] = rand($oneMin, $oneMax); $twoMax = ( ($num - $data[0]) > 9 ) ? 9 : ($num - $data[0]); $twoMin = ( ($num - $data[0]) > 9 ) ? ($num - $data[0] - 9) : 0; $data[1] = rand($twoMin, $twoMax); $data[2] = $num - $data[0] - $data[1]; return $data;}
自己写了一个 求点评,不知道有没有缺陷 或效率怎么样
穷举然后再随机抽取
只需要一个随机的组合就行了
那简单啊。如下:
$sum = 13;//要求的和,不能超过27 $result = array(rand(0,9));//第一个随机数,下面是第二个随机数,要控制范围,否则第三个数可能就不在范围内 if($result[0]<$sum-9) $result[] = rand($sum-9-$result[0],9); else $result[] = rand(0,$sum-$result[0]); $result[] = $sum-array_sum($result);//和减去已经生成的两个随机数,就是第三个数。 var_dump($result);
echo number(13);function number($num) { $r[] = rand(1, 9); $r[] = rand(1, min(9, $num - $r[0])); $r[] = $num - $r[0] - $r[1]; return join('+', $r);}

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。
