PHP实现杨辉三角形
<?php
/****
* 杨辉三角形:我的实现方式。
* 下标
* 1 0
* 1 1 1 循环上一行数据1次,计算后结果追加到当前行末尾
* 1 2 1 2
* 1 3 3 1 3
* 1 4 6 4 1 4
* 1 5 10 10 5 1 5
* 规律:
* 1、就是一个二维数组的遍历,数组下标 0 开始。
* 2、每一行都是 1 为首位,剩下的数字为上一行的下标作为最大循环次数-1来分别计算上一行的数据追加到当前行末尾。计算方式:上一行的当前下标的数据值+上一行的当前下标+1的数据值=当前行末尾追加数据值(c=a[b]+a[b+1])。
* 3、有两点需要注意:①循环下标为 0 的行时,-1 不存在,所以直接跳过当前循环。②上一行数据计算时,按照规律 c=a[b]+a[b+1]来计算,第 0 行数据就开始不满足这个规律了,可以通过 a[b+1] 值不存在时看作值为 0 处理。
*/
/***
* 实现方式一
* 注意:只能支撑到1700行,1800行直接报内存的错(Fatal error: Allowed memory size of 134217728 bytes exhausted)。
* PHP版本:5.6.27
*/
//不限制执行时间
set_time_limit(0);
//指定三角形的行数
$line=5;
//定义一个空数组
$square_arr=array();
for($j=0;$j<$line;$j++){
//初始化每行首位数字
$square_arr[$j]=array(1);
//上一行的下标
$temp_index=$j-1;
//获取上一行的数据
$temp_arr=isset($square_arr[$temp_index])?$square_arr[$temp_index]:array();
//上一行不存在直接跳过本次循环
if(empty($temp_arr)) continue;
//计算当前行剩余数据
for($o=0;$o<$j;$o++){
//获取上一行当前下标+1数值,不存在则为 0
$last_num = isset($temp_arr[$o+1])?$temp_arr[$o+1]:0;
//上一行当前下标数值+(上一行当前下标+1)数值
$end_num = $temp_arr[$o]+$last_num;
//将结果追加到当前行
array_push($square_arr[$j],$end_num);
}
//销毁变量
unset($temp_index,$temp_arr);
}
//遍历结果
foreach($square_arr as $square_val){
echo implode(' ',$square_val);
echo '<br>';
}
echo '<hr>';
/***
* 实现方式二
* 在 实现方式一 的基础上做了优化,测试可实现10w行。执行时间为:2793.508秒;PHP版本:7.0.29
*/
//设置无限执行时间
set_time_limit(0);
//能够支撑到100000行,执行时间:
$line=5;
//初始化第一行(同时用来存储每最后一行数据)
$square_arr=array(1);
//计算第二行开始剩下的数据
for($j=1;$j<$line;$j++){
//用来存储当前行数据
$now_arr=array(1);
//计算当前行剩余数据
for($o=0;$o<$j;$o++){
//获取上一行当前下标+1数值,不存在则为 0
$last_num = isset($square_arr[$o+1])?$square_arr[$o+1]:0;
//上一行当前下标数值+(上一行当前下标+1)数值
$end_num = $square_arr[$o]+$last_num;
//将结果追加到当前行
array_push($now_arr,$end_num);
}
//输出上一行数据
echo implode(' ',$square_arr).'<br>';
//将上一行数据替换成当前行数据
$square_arr=$now_arr;
//销毁变量
unset($now_arr);
}
//因为最后一行保持在初始数组内,所以最后要输出一下初始数组
echo implode(' ',$square_arr).'<br>';
unset($square_arr);
PHP实现杨辉三角形的更多相关文章
- java 实现(代码) -- 水仙花数 + 杨辉三角形
/* 在控制台输出所有的“水仙花数” 水仙花:100-999 在以上数字范围内:这个数=个位*个位*个位+十位*十位*十位+百位*百位*百位 例如:xyz=x^3 +y^3 +z^3 怎么把三位数字拆 ...
- 洛谷 P1313 计算系数 Label:杨辉三角形 多项式计算
题目描述 给定一个多项式(by+ax)^k,请求出多项式展开后x^n*y^m 项的系数. 输入输出格式 输入格式: 输入文件名为factor.in. 共一行,包含5 个整数,分别为 a ,b ,k , ...
- [LeetCode 118] - 杨辉三角形(Pascal's Triangle)
问题 给出变量numRows,生成杨辉三角形的前numRows行. 例如,给出numRows=5,返回: [ [1], [1,1], [1,2,1], [1,3,3,1], [1, ...
- [LeetCode 119] - 杨辉三角形II(Pascal's Triangle II)
问题 给出一个索引k,返回杨辉三角形的第k行. 例如,给出k = 3,返回[1, 3, 3, 1] 注意: 你可以优化你的算法使之只使用O(k)的额外空间吗? 初始思路 首先来复习复习杨辉三角形的性质 ...
- C# 杨辉三角形算法
代码如下: static void Main(string[] args) { int[][] Array_int = new int[10][]; //向数组中记录杨辉三角形的值 for (int ...
- 杨辉三角形II(Pascal's Triangle II)
杨辉三角形II(Pascal's Triangle II) 问题 给出一个索引k,返回杨辉三角形的第k行. 例如,给出k = 3,返回[1, 3, 3, 1] 注意: 你可以优化你的算法使之只使用O( ...
- 17.从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。请采用循环控制语句来实现。 (三角形腰上的数为1,其他位置的数为其上一行相邻两个数之和。) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
17.从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行.请采用循环控制语句来实现. (三角形腰上的数为1,其他位置的数为其上一行相邻两个数之和.) 1 1 1 1 ...
- Gym 100952 D. Time to go back(杨辉三角形)
D - Time to go back Gym - 100952D http://codeforces.com/gym/100952/problem/D D. Time to go back time ...
- Java温故而知新-杨辉三角形
Java温故而知新-杨辉三角形 一. 先说需求 需求 打印输出杨辉三角形,行数可变,支持50行内的任意数. 预期结果如图所示 1 这是第几行呢,是第1 1 1 这是第几行呢,是第2 1 2 1 这是第 ...
- C#输出杨辉三角形
话不多说直接上代码: class Program { static void Main(string[] args) { ;//杨辉三角形的长度 Console.Write("输入杨辉三角长 ...
随机推荐
- [jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)
题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 注: ...
- [HEOI2016/TJOI2016] 排序 解题报告(二分答案/线段树分裂合并+set)
题目链接: https://www.luogu.org/problemnew/show/P2824 题目描述: 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在 ...
- etxjs
序言 编辑 功能丰富,无人能出其右. 无论是界面之美,还是功能之强,ext的表格控件都高居榜首. 单选行,多选行,高亮显示选中的行,拖拽改变列宽度,按列排序,这些基本功能ExtJS轻量级实现. 自动生 ...
- sqlserver如何给某一用户分配只能查看某一视图的权限
exec sp_addrole 'guestview' --GRANT SELECT ON veiw TO [guestview]; GRANT SELECT ON CustomerInfo TO ...
- Codeforces 987C. Three displays(o(n^2))
刚开始三重循环tle test11.后来想了个双重循环的方法. 解题思路: 1.双重循环一次,用一个一位数组存j和比j小的i的和的最小值. 2.再双重循环一次,找到比j大的数k,更新结果为ans=mi ...
- SpringCloud学习笔记(10)----Spring Cloud Netflix之声明式 REST客户端 -Feign的高级特性
1. Feign的默认配置 Feign 的默认配置 Spring Cloud Netflix 提供的默认实现类:FeignClientsConfiguration 解码器:Decoder feignD ...
- LightOJ-1336 Sigma Function 唯一分解定理 巧妙使用sqrt()等算数目
题目链接:https://cn.vjudge.net/problem/LightOJ-1336 题意 给出一个区间[1, n],求区间内所有数中因数之和为偶数的数目 思路 第二次写这个题 首先想到唯一 ...
- C语言传参的类型匹配
有一个这样的问题: 形参const char *p和实参char *c可以匹配 形参const char**p和实参char**c不可以匹配 注:argument和parameter:严格而言,par ...
- P1017 进制转换 (负进制转换)
和平常的转化差不多 加多一步 如果余数 < 0, 那么余数减去除数(此时除数是负),商数加1 #include<cstdio> #define _for(i, a, b) for(i ...
- 紫书 习题 8-21 UVa 1621 (问题分析方法)
知道是构造法但是想了挺久没有什么思路. 然后去找博客竟然只有一篇!!https://blog.csdn.net/no_name233/article/details/51909300 然后博客里面又说 ...