PHP是一种通过排列组合来增加1到9数字相加等于20的方法。

PHP是一种通过排列组合来增加1到9数字相加等于20的方法。
本文的示例说明PHP的方法,通过排列和组合,将1到9的数字相加相加等于20,供大家参考,具体实现方法如下:
< PHP
(0)set_time_limit;
*
功能说明:huoqu_zhuhe(美元美元美元的情商,家书,是= 0)
参数描述:数个数相加的总和;
家属-------美元美元树=阵列(1,2,3,4,5,6,7,8,9):加数加数的数组,可以使用;
你想用一个不同的数字,每次只有一美元吗默认值只有1, 0, 1。
返回类型:字符串数组,数字连接到+:{ 0 } = 3 + 8 + 9 { 1 } = 4 + 7 + 9
测试结果:1:对于较小的加数阵列,速度太大,有些慢;2:每一次你可以使用不同的加数,处理会慢下来
所使用的方法是生成所有可能的排列,重复置换处理过滤器,并得到组合。
* /
功能huoqu_zhuhe(美元美元美元的情商,家书,是= 1)
{如果(空(美元树)| |!is_array($家属)){ echo'error:返回数组必须加数;};
肺俞= 0美元;
为($我= 0;$我<计数($家属);$ i++){
如果(!is_numeric($家属{我})){ $肺俞= 1;断裂;}
}
如果(肺俞= = 1美元){ echo'error;数组必须是一个合法的号码;return false;}
莲=美元美元树;
savearr美元=阵();
而(!空($)){
1;
$ newarr =阵();
$ k=0;
($ i = 0;$ i <计数($连);$ + +){
lianstr美元美元美元=莲{我};
($ ARR =爆炸+,$ lianstr);
他为array_sum美元($ ARR);
/ / echo $他;
为(J = 0美元;J <计数($家属);$ J++){
savestr美元= lianstr美元。+$家属{ $ J };
如果(合一= = 1in_array($家属{ $ J },$ ARR))继续;
如果((($他+ $家属{ $ J })> $ EQ)打破;
else if(($他+ $家属{ $ J })= = $ EQ){
savearr { } = savestr美元美元;
}
别的{ $ newarr { $ K } =美元美元savestr;K+;}
} / /结束(J = 0;J <计数($家属))
结尾($ i = 0;$ i用于
莲= newarr美元美元;
}结束时(!空(美元)
/ / print_r($ savearr);
生成组件,过滤重复,2个数组作为参考,另一个是通过移动匹配,可以过滤
isguolu美元=阵列(ID);0到1家 / /存储选择相应的
为($我= 0;$我<计数(savearr美元美元);i++){
isguolu { } = 0美元;
}初始化所有0个
为($我= 0;$我<计数(savearr美元美元);i++){
($ arr1 =爆炸+,$ savearr {我});
len1美元=计数(合前);
为(J =我+ 1;J <计数($ savearr);$ J++){
($ arr2 =爆炸+,savearr美元{ $ J });
美元($ arr2 len2个=计数);
如果(len1美元!= $ len2个)继续;
如果($ isguolu { $ J } = = 1)继续;
美元美元 / arr2 arr1和比较/
技术= 0美元;
为($ I1 = 0;$ I1 <计数($ arr1);$ I1 + +){
美元美元美元} { I1 =前;
你= 0美元;
为($ I2 = $ I1 I2<计数;美元(约合arr2);$ I2 + +){
如果(a = = $ arr2 { $ I2 }){
$技术+ +;
你= 1美元;
T =美元美元美元arr2 I1 } {;
美元美元美元} = { arr2 I1 I2 arr2 {美元};
美元美元美元} = { arr2 I2 T;
打破;
}
}($ = 0)
如果(你= = 0美元)打破;
} / /结束(I1 = 0美元美元;I1 <计数(合前);
如果($技术= = len1美元美元美元)isguolu { } = 1 J;
}($ = $ i + 1);
} / /结束(我= 0;$我<计数(savearr美元美元);i++)
/ / print_r($ isguolu);
根据选择筛选器阵列
$ newarr =阵();
为($我= 0;$我<计数(savearr美元美元);i++){
如果($ isguolu {我} = = 0美元)$ newarr { } = {我} savearr美元美元;
}
/ / print_r($ newarr);
返回newarr;
}
这是一个测试。
把所有 / / 1,2,3,4,5,6,7,8,9的总和等于20的组合
美元树=阵列(1,2,3,4,5,6,7,8,9);
$ = 20;
如果($ Jieguo = huoqu_zhuhe($美元情商,家书,1))print_r($结果);
>

结果如下:
阵列

{ 0 } = 3 + 8 + 9
{ 1 } = 4 + 7 + 9
{ 2 } = 5 + 6 + 9
{ 3 } = 5 + 7 + 8
{ 4 } = 1 + 2 + 8 + 9
{ 5 } = 1 + 3 + 7 + 9
{ 6 } = 1 + 4 + 6 + 9
{ 7 } = 1 + 4 + 7 + 8
{ 8 } = 1 + 5 + 6 + 8
{ 9 } = 2 + 3 + 6 + 9
{ 10 } = 2 + 3 + 7 + 8
{ 11 } = 2 + 4 + 5 + 9
{ 12 } = 2 + 4 + 6 + 8
{ 13 } = 2 + 5 + 6 + 7
{ 14 } = 3 + 4 + 5 + 8
{ 15 } = 3 + 4 + 6 + 7
{ 16 } = 1 + 2 + 3 + 5 + 9
{ 17 } = 1 + 2 + 3 + 6 + 8
{ 18 } = 1 + 2 + 4 + 5 + 8
{ 19 } = 1 + 2 + 4 + 6 + 7
{ 20 } = 1 + 3 + 4 + 5 + 7
{ 21 } = 2 + 3 + 4 + 5 + 6

希望本文能对大家的PHP程序设计有所帮助。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部