【长期更新】 PHP题目
1.要求在一组数中,插入一个新数,并维护原来的排序方式不变
<?php
//1.要求在一组数中,插入一个新数,并维护原来的排序方式不变
function insertArr($arr,$val){
$pos=0;
if (sizeof($arr)==0) return array($val); //传入数组没有值
if (sizeof($arr)==1){ //传入数组个数为1
return array($val,$arr[0]);
}
//分清排序
$bfind=false;
if ($arr[0]>$arr[sizeof($arr) - 1]){
$bfind=true; //从大到小排序
}else{
$bfind=false;//从小到大排序
}
for($i=0;$i<sizeof($arr);$i++){ //找到要插入值应该插入的位置。
if ($bfind){
if ($arr[$i]<$val){
$pos=$i;
break;
}
}else{
if ($arr[$i]>$val){
$pos=$i;
break;
}
}
}
$left_arr=array();
$right_arr=array();
for ($i=0;$i<sizeof($arr);$i++){ //根据要插入的值把数组分左右两部分。
if ($i<$pos){
$left_arr[]=$arr[$i];
}else{
$right_arr[]=$arr[$i];
}
}
return array_merge($left_arr,array($val),$right_arr);
}
//测试
$arr=array();
var_dump(insertArr($arr,10));echo "<br>";
$arr=array(1);
var_dump(insertArr($arr,10));echo "<br>";
$arr=array(1,2,5,9,13,15);
var_dump(insertArr($arr,10));echo "<br>";
$arr=array(40,15,12,9,8,1);
var_dump(insertArr($arr,10));echo "<br>";
?>
2.用二分法在一个数组中查找你所需元素(针对数字数组,返回值为下标)
<?php
//二分法
function binarySearch($a, $val){
$low = 0;
$high= count($a) - 1;
while($low <= $high){
$mid = intval(($low+$high)/2);
if($a[$mid] == $val) return $mid; //找到相等的就返回所在的位置
if($a[$mid] > $val){ //要查找的在前半截
$high = $mid - 1;
}else{
$low = $mid + 1; //要查找的在后半截
}
}
return -1;
}
//测试
$arr=array(1,2,6,8,10);
echo binarySearch($arr,6);
?>
3.打印杨辉三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
//规律 //第一行和第二行均为1
//从第三行开始,第一个和最后一个为1
//第二个位置的值为上一行的前一个位置的值和本位置正上方的值的和。
<?php function generationYanghui($num){
$arr=array();
for ($i=0;$i<$num;$i++){
$arr[$i]=array();
//第一行和第二行均为1
if ($i==0){
$arr[$i][0]=1;
continue;
}
if ($i==1){
$arr[$i][0]=1;
$arr[$i][1]=1;
continue;
}
//第三行的2等于第二行的第一个1加第一个1
for ($j=0;$j<=$i;$j++){
if ($j==0){
$arr[$i][$j]=1;
continue;
}
if ($j==$i){
$arr[$i][$j]=1;
continue;
}
$arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j];
}
}
return $arr;
}
//测试
$num=6;
$arrYH = generationYanghui($num); for ($i=0;$i<sizeof($arrYH);$i++){
for($j=0;$j<sizeof($arrYH[$i]);$j++){
echo $arrYH[$i][$j] . " " ;
}
echo "<Br>";
}
?>
4.冒泡排序(统计一维数组)
<?php
//冒泡排序(一维数组)
function bubble_sort($arr){
//统计数组中个数
$count = count($arr);
if ($count <= 0) return false;
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i; $j--){
if ($arr[$j] < $arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
return $arr;
}
//测试
$_array = array('5', '8' ,'5' ,'6' ,'9' ,'3' ,'2' ,'4');
$_array = bubble_sort($_array);
var_dump($_array);
?>
5.快速排序算法
<?php
function quick_sort($arr){
if(count($arr)<=1){
return $arr;
}
$key=$arr[0];
$left_arr=array();
$right_arr=array();
for($i=1;$i<count($arr);$i++){
if($arr[$i]<=$key){
$left_arr[]=$arr[$i];
}else{
$right_arr[]=$arr[$i];
}
}
$left_arr=quick_sort($left_arr);
$right_arr=quick_sort($right_arr);
return array_merge($left_arr,array($key),$right_arr);
}
//使用实例
$_array = array('6', '8' ,'7' ,'6' ,'9' ,'2' ,'2' ,'4');
$_array = quick_sort($_array);
var_dump($_array);
?>
7.选择排序
<?php
function select_sort($arr) {
//实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数
//$i 当前最小值的位置, 需要参与比较的元素
for($i=0, $len=count($arr); $i<$len-1; $i++) {
//先假设最小的值的位置
$p = $i;
//$j 当前都需要和哪些元素比较,$i 后边的。
for($j=$i+1; $j<$len; $j++) {
//$arr[$p] 是 当前已知的最小值
if($arr[$p] > $arr[$j]) {
//比较,发现更小的,记录下最小值的位置;并且在下次比较时,
// 应该采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。
//如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//返回最终结果
return $arr;
} $arr = [1,2,0,4,5,6];
$data = select_sort($arr);
var_dump($data);
8.公鸡3元每只,母鸡5元每只,小鸡1元3只,一百元钱买一百只鸡。请求出公鸡,母鸡和小鸡的数目。
<?php $totalmoney=100;
$totalchicken=100;
$cocknum = intval($totalmoney/3); //全买公鸡的数目
$hennum = intval($totalmoney/5); //全买母鸡的数目
$biddynum = 100; //小鸡数为100
for ($i=1;$i<$cocknum;$i++){ //公鸡数
for ($j=1;$j<$hennum;$j++){//母鸡数
for ($k=1;$k<$biddynum;$k++){//小鸡数
$money = $i * 3 + $j * 5 + $k / 3;
$total = $i + $j + $k;
if (($money == $totalmoney) &&($total == $totalchicken)){
echo "公鸡:" . $i . "只,母鸡:" . $j ."只,小鸡:" . $k ."只<Br>";
}
}
}
}
?>
9.小猴第一天摘下若干枣子,当即吃掉了一半,不过瘾又多吃了一个;第二天吃了剩下的一半又多吃了一个;以后每一天都吃了前一天剩下的一半多一个。到第十天小 猴再想吃时,见到只剩下一只枣子了。问第一天这堆枣子有多少?
<?php //倒推算法。
function getTotal($day){
$total=0;
if ($day==1){ //第一天为一个
$total = 1;
}else{ //以后每一天为前一天的两个加上一个。
$total = 2*(getTotal($day-1)+1);
}
return $total;
}
//测试
echo getTotal(10);
?>
10.一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币个数找给小孩。假设提供了数目不限的面值为2 5美分、1 0美 分、5美分、及1美分的硬币,写一个算法让售货员用最少的硬币个数找给小孩
<?php $totalmoney=100; //总钱数(美分)
$consumemoney=11; //花去的钱
$complet=false; //找钱完成
$change=0;
//找零25,10,5,1美分钱的个数
$ch25 = 0;
$ch10 = 0;
$ch5 = 0;
$ch1 = 0;
for(;;){
if ($complet) break;
$left=$totalmoney - $consumemoney - $change; //还没有找的钱
if ($left <= 0) {
$complet = true;
}else{
if ($left >= 25){ //找25美分钱
$change = $change + 25;
$ch25 = $ch25 + 1;
}else if ($left >= 10 ){//找10美分钱
$change = $change + 10;
$ch10 = $ch10 + 1;
}else if ($left >= 5){//找5美分钱
$change = $change + 5;
$ch5 = $ch5 + 1;
}else{//找1美分钱
$change = $change + 1;
$ch1 = $ch1 + 1;
}
}
}
echo "剩余零钱 " . ($totalmoney - $consumemoney) . " 美分<br>";
echo "找25美分 " . $ch25 . " 个<br>";
echo "找10美分 " . $ch10 . " 个<br>";
echo "找 5美分 " . $ch5 . " 个<br>";
echo "找 1美分 " . $ch1 . " 个<br>";
?>
11.五只猴子采得一堆桃子,猴子彼此约定隔天早起后再分食。不过,就在半夜里,一只猴子偷偷起来,把桃子均分成五堆后,发现还多一个,它吃掉这桃子,并拿走了 其中一堆。第二只猴子醒来,又把桃子均分成五堆后,还是多了一个,它也吃掉这个桃子,并拿走了其中一堆。第三只,第四只,第五只猴子都依次如此分食桃子。 那么桃子数最少应该有几个呢?
<?php
echo "start";
for ($y=16;;$y+=4){
if (($y-1)%5!=0) continue;
$x=$y;
for ($i=4;$i>=1&&$x%4==0;$i--){
$x=($x/4)*5+1;
}
if ($i==0){
echo "桃子最少应该有:" . $x;
break;
}
}
?>
12.请使用一句话将类似“1910-09-09”的日期各式转换为“一九一零年九月九日”这样的各式。(需要有通用性,是不是一句话不是关键,但不允许使用 if\switch\while\for等语句)
<?php function changeDate($str)
{
//去除符号'-'
$pattern='/(\d+)-(0*)([1-9]+)-(0*)([1-9]+)/';
$replace='${1}年${3}月${5}日';
$str= preg_replace($pattern, $replace, $str);
//替换数字
$patterns=array("/0/","/1/","/2/","/3/","/4/","/5/","/6/","/7/","/8/","/9/");
$replaces=array("零","一","二","三","四","五","六","七","八","九");
$re = preg_replace($patterns, $replaces, $str);
return $re;
}
$str = '2019-01-16';
echo changeDate($str);//二零一九年一月一六日
【长期更新】 PHP题目的更多相关文章
- Java代码优化(长期更新)
前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸 ...
- iOS-工作经验+资料分享(长期更新)
在此记录工作中的一些经验和技术资料 长期更新 欢迎各位业内朋友指正.交流技术上的问题 0.苹果开发联盟电话 4006 701855 1.轻易不用使用tableViewController,因为改变他自 ...
- Ubuntu16.04系统美化、常用软件安装等,长期更新
Ubuntu16.04系统美化.常用软件安装等,长期更新 IT之家啊 18-09-0915:00 因为我个人偏向于玩VPS.服务器之类的东西,所以一般我都是用CentOS.不过对于桌面版的Linux, ...
- Spring MVC & Boot & Cloud 技术教程汇总(长期更新)
昨天我们发布了Java成神之路上的知识汇总,今天继续. Java成神之路技术整理(长期更新) 以下是Java技术栈微信公众号发布的关于 Spring/ Spring MVC/ Spring Boot/ ...
- [原创][FPGA]Quartus实用小技巧(长期更新)
0. 简介 在使用Quartus软件时,经常会时不时的发现一些小技巧,本文的目的是总结所查阅或者发现到的小技巧,本文长期更新. 1. Quartus中的模板功能 最近在Quartus II的菜单里找到 ...
- python的多版本安装以及常见错误(长期更新)
(此文长期更新)Python安装常见错误汇总 注:本教程以python3.6为基准 既然是总结安装过程中遇到的错误,就顺便记录一下我的安装过程好了. 先来列举一下安装python3.6过程中可能需要的 ...
- 项目中解决实际问题的代码片段-javascript方法,Vue方法(长期更新)
总结项目用到的一些处理方法,用来解决数据处理的一些实际问题,所有方法都可以放在一个公共工具方法里面,实现不限ES5,ES6还有些Vue处理的方法. 都是项目中来的,有代码跟图片展示,长期更新. 1.获 ...
- kali2.0安装及使用笔记(附带vim配置,长期更新)
作者:陈栋权 时间:16/08/19 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 如有特别用途,请与我联系邮 ...
- 微信小程序常见问题集合(长期更新)
最新更新: 新手跳坑系列:推荐阅读:<二十四>request:fail错误(含https解决方案)(真机预览问题 跳坑指南<七十>如何让微信小程序服务类目审核通过 跳坑六十九: ...
随机推荐
- ping + traceroute + tracert + tcpdump等命令的原理
1.ping:关键就在这里,IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的. MAC如果以前两机有过通信,在 A 机的 ARP 缓存表应该 有 ...
- 一、java三大特性--封装
封装字面意思即包装.专业点来说就是数据隐藏,是指利用抽象数据将数据和基于数据的操作封装起来,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能的隐藏细节,只保留一些对外的接口和外部 ...
- MFC入门(三)-- MFC图片/文字控件(循环显示文字和图片的小程序)
惯例附上前几个博客的链接: MFC入门(一)简单配置:http://blog.csdn.net/zmdsjtu/article/details/52311107 MFC入门(二)读取输入字符:http ...
- Vue-父子组件传值
在 Vue 中,父子组件的关系可以总结为 prop 向下传递,事件向上传递.一.父组件向子组件传值 使用 Prop 传递数据,父组件的数据需要通过 prop 才能下发到子组件中,子组件要显式地用 pr ...
- Luogu P1514 引水入城
我承认我有点懒(洛谷已经发过题解了,但我发誓要坚持写博客) 这道题坑了我3天…… 首先一看就与染色问题类似,果断BFS(写DFS炸了) 先将最上面(靠近水)的一行全部扔进队列里,做一遍BFS 再对最下 ...
- [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子
[Spark][Hive][Python][SQL]Spark 读取Hive表的小例子$ cat customers.txt 1 Ali us 2 Bsb ca 3 Carls mx $ hive h ...
- [Python]Python 使用 for 循环的小例子
[Python]Python 使用 for 循环的小例子: In [7]: for i in range(5): ...: print "xxxx" ...: print &quo ...
- Apache Spark 2.2中基于成本的优化器(CBO)(转载)
Apache Spark 2.2最近引入了高级的基于成本的优化器框架用于收集并均衡不同的列数据的统计工作 (例如., 基(cardinality).唯一值的数量.空值.最大最小值.平均/最大长度,等等 ...
- Visual Studio2017 数据库架构比较
一.前言 开发的时候在测试服务器上和线网服务器上面都有我们的数据库,当我们在线网上面修改或者新增一些字段后,线网的数据库也需要更新,这个时候根据表的修改记录,然后在线网上面一个一个增加修改很浪费效率而 ...
- 支持自定义协议的虚拟仪器【winform版】
首先,这个程序的由来,额,工作以来,做的最久的就是上位机,对市面上的大部分组态软件都感到不满,不好用,LabView虽然用起来不错,但是入门还是不够简单,刚好现在工作比较闲(已经不再做上位机了),所以 ...