3个数的和在一个范围里,求3个数
这3个数的取值范围是1-6,必定是整数
第一种情况,3个数的和取值范围4-10,随机产生这3个数(分3个数可以全部重复和不可以全部重复两种情况)
第二种情况,3个数的和取值范围11-17,随机产生这3个数(分3个数可以全部重复和不可以全部重复两种情况)
举例说明:
如果允许全部重复,那么如果3个数的和是15,那么3个数可能是5,5,5,而如果不允许全部重复,
3个数只可能是4,5,6或,6,6,3或3,6,6之类的组合
求一个函数,
//根据给出的和,和是否允许3个数完全相同3个数的数组,
//要求必须能否返回所有可能的组合,比如6,6,3和3,6,6都必须有可能返回。
//程序只要求随机返回所有可能性组合之一即可。
function get3nums($第几种情况,$是否允许全部重复)
//比如list($rand1,$rand2,$rand3) = get3nums(2,false);//第二种情况,且3个数字不允许全部相同
//得到$rand1=6,$rand2=6,$rand3=3
function get3nums($qingkuang,$ifxiangtong){
}
回复讨论(解决方案)
第一种情况
因为有三个数,可以先在传入数值的基础上减去2,然后随机出第一个数,然后计算剩余。
比如
function f($n)
{
$t = $n - 2;
$a = rand(1,min(6,$t));
$t = $n - $a - 1;
$b = rand(1,min(6,$t));
$t = $n - $a - $b;
return array($a,$b,$c);
}
如果要不能三个重复,增加判断重复的语句好了
上面有一个变量名写错了
function f($n)
{
$t = $n - 2;
$a = rand(1,min(6,$t));
$t = $n - $a - 1;
$b = rand(1,min(6,$t));
$c = $n - $a - $b;
return array($a,$b,$c);
}
第二种情况和第一种一样
不能全部重复只要在返回值前增加一个判断
if($a == $b && $b == $c)
{
return f($n);
}
/** * @$start 范围下限 * @$end 范围上限 * @$repeat 允许重复,默认不允许 **/ function get3nums($start, $end, $repeat=false) { do { $r = array(); $n = rand($start, $end); //取得指定范围中的一个数 $a = intval($n/3); $r[] = rand(1, min($a, 6)); $r[] = rand(1, min($a, 6)); $r[] = $n - array_sum($r); if($repeat) break; }while(count(array_count_values($r)) == 1); return $r;}print_r(get3nums(4, 10));print_r(get3nums(4, 10, 1));print_r(get3nums(11, 17));print_r(get3nums(11, 17, 1));
/** * @$start 范围下限 * @$end 范围上限 * @$repeat 允许重复,默认不允许 **/ function get3nums($start, $end, $repeat=false) { do { $r = array(); $n = rand($start, $end); //取得指定范围中的一个数 $a = intval($n/3); $r[] = rand(1, min($a, 6)); $r[] = rand(1, min($a, 6)); $r[] = $n - array_sum($r); if($repeat) break; }while(count(array_count_values($r)) == 1); return $r;}print_r(get3nums(4, 10));print_r(get3nums(4, 10, 1));print_r(get3nums(11, 17));print_r(get3nums(11, 17, 1));
不对啊,我的数字1-6之间,你这个好多都超过6了
Array
(
[0] => 2
[1] => 2
[2] => 4
)
Array
(
[0] => 1
[1] => 1
[2] => 2
)
Array
(
[0] => 4
[1] => 1
[2] => 8
)
Array
(
[0] => 2
[1] => 1
[2] => 8
)
不对啊,我的数字1-6之间,你这个好多都超过6了
你到底有没有看懂?
不对啊,我的数字1-6之间,你这个好多都超过6了
你到底有没有看懂?
3个数的取值都必须在1-6之间。输出的居然有8
/**
* @$start 范围下限
* @$end 范围上限
* @$repeat 允许重复,默认不允许
**/
function get3nums($start, $end, $repeat=false) {
if(!$repeat){
$n =rand($start, $end); //取得指定范围中的一个数
for($i=1;$i<7;$i++){
for($j=1;$j<7;$j++){
$k=$n-$i-$j;
if($k<7 &&$k>0){
if(($i==$j and $j==$k)){
continue;
}
echo $i.'-'.$j.'-'.$k."
";
}
}
}
}else{
$n =rand($start, $end);
$avg=$n/3;
if( $avg!=intval($avg)){
echo "no value"."
";
}else{
echo $avg.'-'.$avg.'-'.$avg."
";
}
}
}
print_r(get3nums(4, 10));
echo '
';
print_r(get3nums(4, 10, 1));
echo '
';
print_r(get3nums(11, 17));
echo '
';
print_r(get3nums(11, 17, 1));
?>
再检查一下就是了
function get3nums($start, $end, $repeat=false) { do { do { $r = array(); $n = rand($start, $end); //取得指定范围中的一个数 $a = intval($n/3); $r[] = rand(1, min($a, 6)); $r[] = rand(1, min($a, 6)); $r[] = $n - array_sum($r); }while(max($r) > 6); if($repeat) break; }while(count(array_count_values($r)) == 1); return $r;}
/**
* @$start 范围下限
* @$end 范围上限
* @$repeat 允许重复,默认不允许
**/
function get3nums($start, $end, $repeat=false) {
if(!$repeat){
$n =rand($start, $end); //取得指定范围中的一个数
for($i=1;$i for($j=1;$j $k=$n-$i-$j;
if($k0){
if(($i==$j and $j==$k)){
continue;
}
echo $i.'-'.$j.'-'.$k."
";
}
}
}
}else{
$n =rand($start, $end);
$avg=$n/3;
if( $avg!=intval($avg)){
echo "no value"."
";
}else{
echo $avg.'-'.$avg.'-'.$avg."
";
}
}
}
print_r(get3nums(4, 10));
echo '
';
print_r(get3nums(4, 10, 1));
echo '
';
print_r(get3nums(11, 17));
echo '
';
print_r(get3nums(11, 17, 1));
?>
错误还是比较多的。而且11,17这种铁定出现6,不理想。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Alipay PHP...

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

The enumeration function in PHP8.1 enhances the clarity and type safety of the code by defining named constants. 1) Enumerations can be integers, strings or objects, improving code readability and type safety. 2) Enumeration is based on class and supports object-oriented features such as traversal and reflection. 3) Enumeration can be used for comparison and assignment to ensure type safety. 4) Enumeration supports adding methods to implement complex logic. 5) Strict type checking and error handling can avoid common errors. 6) Enumeration reduces magic value and improves maintainability, but pay attention to performance optimization.

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.
