本文实例讲述了php通过排列组合实现1到9数字相加都等于20的方法。分享给大家供大家参考。具体实现方法如下:

set_time_limit(0);

/*

函数说明:huoqu_zhuhe($eq,$jiashu,$isone=0)

参数说明:$eq---几个数相加的总和;

$jiashu-------加数数组:$jiashu=array(1,2,3,4,5,6,7,8,9),可以使用的加数;

$isone---是否要每次使用不同的加数,唯一性,1是 0 不,默认1

返回类型:数组,数字以+相连的字符串:[0] => 3+8+9 [1] => 4+7+9

测试效果:1:对于加数数组比较小的,速度可以,过大的话,有些慢;2:每次可以使用不同的加数的,处理会变慢

采用的方法是:生成所有可能排列,对排列处理过滤重复的,得到组合

*/

function huoqu_zhuhe($eq,$jiashu,$isone=1)

{if(empty($jiashu)||!is_array($jiashu)){echo 'error:加数必须数组';return false;}

$feishu=0;

for($i=0;$i

if(!is_numeric($jiashu[$i])){$feishu=1;break;}

}

if($feishu==1){echo 'error;数组中必须是合法的数字';return false;}

$lian=$jiashu;

$savearr=array();

while(!empty($lian)){

//echo 1;

$newarr=array();

$k=0;

for($i=0;$i

$lianstr=$lian[$i];

$arr=explode('+',$lianstr);

$nowhe=array_sum($arr);

//echo $nowhe;

for($j=0;$j

$savestr=$lianstr.'+'.$jiashu[$j];

if($isone==1&&in_array($jiashu[$j],$arr))continue;

if(($nowhe+$jiashu[$j])>$eq)break;

else if(($nowhe+$jiashu[$j])==$eq){

$savearr[]=$savestr;

}

else{$newarr[$k]=$savestr;$k++;}

}//end for($j=0;$j

}// end for($i=0;$i

$lian=$newarr;

}//end while(!empty($lian))

//print_r($savearr);

//生成组合部分,过滤重复,2个数组以一个为参考,看另一个是否能通过移动达到匹配,可以,过滤

$isguolu=array();//存储对应的id的取舍 0取 1舍

for($i=0;$i

$isguolu[]=0;

}//初始化全部0

for($i=0;$i

$arr1=explode('+',$savearr[$i]);

$len1=count($arr1);

for($j=$i+1;$j

$arr2=explode('+',$savearr[$j]);

$len2=count($arr2);

if($len1!=$len2)continue;

if($isguolu[$j]==1)continue;

//比较$arr1和$arr2开始

$jishu=0;

for($i1=0;$i1

$a=$arr1[$i1];

$isyou=0;

for($i2=$i1;$i2

if($a==$arr2[$i2]){

$jishu++;

$isyou=1;

$t=$arr2[$i1];

$arr2[$i1]=$arr2[$i2];

$arr2[$i2]=$t;

break;

}

}//end for($i2=0

if($isyou==0)break;

}// end for($i1=0;$i1

if($jishu==$len1)$isguolu[$j]=1;

}//end for($j=$i+1;

}//end for($i=0;$i

//print_r($isguolu);

//根据过滤数组选择

$newarr=array();

for($i=0;$i

if($isguolu[$i]==0)$newarr[]=$savearr[$i];

}

//print_r($newarr);

return $newarr;

}

//下面是一个测试

//取用1,2,3,4,5,6,7,8,9相加所有等于20的组合

$jiashu=array(1,2,3,4,5,6,7,8,9);

$eq=20;

if($jieguo=huoqu_zhuhe($eq,$jiashu,1))print_r($jieguo);

?>

运行结果如下:

Array

(

[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程序设计有所帮助。

php输出1到10的和,php通过排列组合实现1到9数字相加都等于20的方法相关推荐

  1. 排列组合思维导图_思维模型10 - Permutations and Combinations | 排列组合

    人生无时无刻不在做决策,有的决策可能只是决定晚上吃什么,而还有一些决策能够决定你后半生的到底能否幸福.我们小时候很多事情都是父母来帮助我们做决定,但是随着年龄的增长,越来越多的事情父母没办法帮我们下决 ...

  2. 运用数组,输出从小到大的10个数

    #include<stdio.h> int main() { int a[10]; int i,j,t;  for(i=0;i<10;i++){    //输入10个数,所以i要一直 ...

  3. 7-3 输出最大公约数 (10 分)

    7-3 输出最大公约数 (10 分) 输入两个数,输出它们的最大公约数. 输入样例: 36 24 结尾无空行 输出样例: 12 结尾无空行 #include<iostream> #incl ...

  4. python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...

    [填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...

  5. c语言找出最大值和最小值并按降序排输出,C语言用排序法给十个数降序排列,用C语言编写,输入10个数按降序排列...

    问题标题 C语言用排序法给十个数降序排列,用C语言编写,输入10个数按降序排列 2019-6-4来自ip:14.161.145.86的网友咨询 浏览量:562 手机版 问题补充: C语言用排序法给十个 ...

  6. php 10到50的随机数,【单选题】php中以下能输出1到10之间的随机数的是( )

    [单选题]php中以下能输出1到10之间的随机数的是( ) 更多相关问题 肺动脉根部有回声失落见于A.室间隔缺损B.房间隔缺损C.动脉导管未闭D.法洛四联症E.主动脉窦瘤破裂 在人的决策过程中,备选方 ...

  7. C语言之int k,j,s; for (k=2;k6;k++,k++)/*for(k=2;k6;k=k+2)*/ {s=1; for(j=k;j6;j++) s+=j; }输出结果为10

    #include <stdio.h> int main(){ int k,j,s; for (k=2;k<6;k++,k++)/*for(k=2;k<6;k=k+2)*/ {s ...

  8. Python:读出文本本件,统计单词数输出;读出文本文件,随机输出其中的10个单词

    #读出文本本件,统计单词数输出:读出文本文件,随机输出其中的10个单词 import re import random f=open("this.txt","r" ...

  9. 杨辉三角:给出正整数n(2<=n<=10),输出杨辉三角前n行 杨辉三角性质:三角形中的每个数字等于它两肩上的数字相加

    给出正整数n(2<=n<=10),输出杨辉三角前n行 杨辉三角性质:三角形中的每个数字等于它两肩上的数字相加输入格式:输入一个正整数n 输出格式:输出杨辉三角的前n行,元素中间用一个空格分 ...

最新文章

  1. 2019微生物组—宏基因组分析专题培训第三期
  2. 计算机程序水仙花数,水仙花数
  3. org.hibernate.hql.ast.QuerySyntaxException: ? is not mapped
  4. Android在第三方应用程序系统应用尽早开始,杀死自己主动的第三方应用程序,以重新启动...
  5. UIActionSheet 多项弹出框
  6. (39)时钟抖动约束
  7. cpu怎么超频_小白秒变高手 Intel酷睿CPU一键超频就是这么简单
  8. nginx 没有cookie_Nginx入门学习(1):一些概念
  9. Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
  10. 解除主键锁_mysql 锁
  11. 我本人常去的一些技术性网站!!(不定期更新)
  12. lbp2900linux驱动下载,佳能lbp2900打印机驱动下载|佳能lbp2900打印机驱动下载 通用版_小皮网...
  13. Gini和AUC的关系(Gini=2AUC-1真的成立吗?)
  14. 软考真题答案-2021年5月系统集成项目管理工程师上午题
  15. windows如何查看内存条型号信息cpu型号信息 # 包括 内存条个数 和 cpu个数
  16. 《就这样享用word》word实用技巧总结-更新中
  17. java web胖客户端,【转载】:瘦客户端、胖客户端、富客户端
  18. [ArcGIS] 空间分析(五) 网络分析
  19. jquery,php实现文件下载和统计下载次数
  20. 台式电脑主板插线步骤图_电脑主板跳线插法 装机接线详细图解教程

热门文章

  1. 局域网聊天关心他们的教育
  2. 大家整齐的qipaifans朗读声忽然乱了
  3. MFC实现 MSN QQ 窗口抖动
  4. 为什么中国开发不出流行的操作系统和编程语言呢?
  5. C++学习攻略,怎样学好C++语言?
  6. 微信终于给我抛橄榄枝了,关于面试我又有话说
  7. 别管真假,先改密码!!!
  8. 将一个字段分成3个 php,整理几个方法
  9. 执行ios命令_MEDUZA:一款针对iOS应用程序的通用SSL解绑工具
  10. 充电枪cp信号控制板_筋膜枪究竟是不是智商税?体验评测后,我的回答更肯定了...