php输出1到10的和,php通过排列组合实现1到9数字相加都等于20的方法
本文实例讲述了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的方法相关推荐
- 排列组合思维导图_思维模型10 - Permutations and Combinations | 排列组合
人生无时无刻不在做决策,有的决策可能只是决定晚上吃什么,而还有一些决策能够决定你后半生的到底能否幸福.我们小时候很多事情都是父母来帮助我们做决定,但是随着年龄的增长,越来越多的事情父母没办法帮我们下决 ...
- 运用数组,输出从小到大的10个数
#include<stdio.h> int main() { int a[10]; int i,j,t; for(i=0;i<10;i++){ //输入10个数,所以i要一直 ...
- 7-3 输出最大公约数 (10 分)
7-3 输出最大公约数 (10 分) 输入两个数,输出它们的最大公约数. 输入样例: 36 24 结尾无空行 输出样例: 12 结尾无空行 #include<iostream> #incl ...
- python随机产生10个数然后前5个升序后5个降序_编写程序,生成包含 20 个随机数的列表,然后将前 10 个元素升序排列,后 10 个元素降序排列,并输出结果。_学小易找答案...
[填空题]在 Python3.x 中 input() 函数接收到的用户输入数据一律为 ________ . [填空题]运算符% (可以.不可以)对浮点数进行求余数操作. [简答题]解释 Python ...
- c语言找出最大值和最小值并按降序排输出,C语言用排序法给十个数降序排列,用C语言编写,输入10个数按降序排列...
问题标题 C语言用排序法给十个数降序排列,用C语言编写,输入10个数按降序排列 2019-6-4来自ip:14.161.145.86的网友咨询 浏览量:562 手机版 问题补充: C语言用排序法给十个 ...
- php 10到50的随机数,【单选题】php中以下能输出1到10之间的随机数的是( )
[单选题]php中以下能输出1到10之间的随机数的是( ) 更多相关问题 肺动脉根部有回声失落见于A.室间隔缺损B.房间隔缺损C.动脉导管未闭D.法洛四联症E.主动脉窦瘤破裂 在人的决策过程中,备选方 ...
- 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 ...
- Python:读出文本本件,统计单词数输出;读出文本文件,随机输出其中的10个单词
#读出文本本件,统计单词数输出:读出文本文件,随机输出其中的10个单词 import re import random f=open("this.txt","r" ...
- 杨辉三角:给出正整数n(2<=n<=10),输出杨辉三角前n行 杨辉三角性质:三角形中的每个数字等于它两肩上的数字相加
给出正整数n(2<=n<=10),输出杨辉三角前n行 杨辉三角性质:三角形中的每个数字等于它两肩上的数字相加输入格式:输入一个正整数n 输出格式:输出杨辉三角的前n行,元素中间用一个空格分 ...
最新文章
- 2019微生物组—宏基因组分析专题培训第三期
- 计算机程序水仙花数,水仙花数
- org.hibernate.hql.ast.QuerySyntaxException: ? is not mapped
- Android在第三方应用程序系统应用尽早开始,杀死自己主动的第三方应用程序,以重新启动...
- UIActionSheet 多项弹出框
- (39)时钟抖动约束
- cpu怎么超频_小白秒变高手 Intel酷睿CPU一键超频就是这么简单
- nginx 没有cookie_Nginx入门学习(1):一些概念
- Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
- 解除主键锁_mysql 锁
- 我本人常去的一些技术性网站!!(不定期更新)
- lbp2900linux驱动下载,佳能lbp2900打印机驱动下载|佳能lbp2900打印机驱动下载 通用版_小皮网...
- Gini和AUC的关系(Gini=2AUC-1真的成立吗?)
- 软考真题答案-2021年5月系统集成项目管理工程师上午题
- windows如何查看内存条型号信息cpu型号信息 # 包括 内存条个数 和 cpu个数
- 《就这样享用word》word实用技巧总结-更新中
- java web胖客户端,【转载】:瘦客户端、胖客户端、富客户端
- [ArcGIS] 空间分析(五) 网络分析
- jquery,php实现文件下载和统计下载次数
- 台式电脑主板插线步骤图_电脑主板跳线插法 装机接线详细图解教程