求助php数组,用for循环解决 一个不定长度的数组1.求出最大值,最小值及其位置。2.找出比两边的数都大的数的个数,输出比两边的数都小的数的值。3.在数组中搜索指定的值($target)是否存在,不存在输出不存在,存在则输出其下标。4.去掉最大值,去掉最小值,求平均值。5.去掉数组中最小的两个数,其他的数求平均值。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $hand = array(213,3245,556,67,43,434,42,45,654,32,46,8,9,4,32); $max = $min = $minSec = $avg1 = $avg2 = $hang[0]; //最大值,最小值 ,第二小值,平均值一,平均值二 $gtBothNum = 0; //比两边都大的数个数 $ltBothArr = array(); //比两边都小的数集合 $target = 5; //指定的值,假定为5 $hasTarget = false; //指定值是否存在 $sum = $count = 0; //总和 foreach($hand as $i=>$v){ $count++; if($v > $max){ $max = $v; } if($v <= $min){ $minSec = $min; $min = $v; }elseif($v <= $minSec){ $minSec = $v; } if(isset($hand[$i-1])&& isset($hand[$i+1])){ // 假定第一个和最后一个不符合楼主要求 if($hand[$i-1] < $v && $v < $hand[$i+1]){ $gtBothNum++; } if($hand[$i-1] > $v && $v > $hand[$i+1]){ $ltBothArr[] = $v; //如果楼主要输出,在这里输出就行了 } } if($v == $target){ $hasTarget = true; //如果楼主要输出,就输出 } $sum += $v; } $avg1 = ($sum - $max - $min)/($count -2); $avg1 = ($sum - $minSec - $min)/($count -2); //时间复杂度为n //吃饭去了 没有测试,楼主自己测试一下 不好意思,打错了两个地方修改后如下:$hand = array(213,3245,556,67,43,434,42,45,654,32,46,8,9,4,32); $max = $min = $minSec = $avg1 = $avg2 = $hand[0]; //最大值,最小值 ,第二小值,平均值一,平均值二 $gtBothNum = 0; //比两边都大的数个数 $ltBothArr = array(); //比两边都小的数集合 $target = 5; //指定的值,假定为5 $hasTarget = false; //指定值是否存在 $sum = $count = 0; //总和 $position = -1; foreach($hand as $i=>$v){ $count++; if($v > $max){ $max = $v; } if($v <= $min){ $minSec = $min; $min = $v; }elseif($v <= $minSec){ $minSec = $v; } if(isset($hand[$i-1])&& isset($hand[$i+1])){ // 假定第一个和最后一个不符合楼主要求 if($hand[$i-1] < $v && $v > $hand[$i+1]){ $gtBothNum++; } if($hand[$i-1] > $v && $v < $hand[$i+1]){ $ltBothArr[] = $v; //如果楼主要输出,在这里输出就行了 } } if($v == $target){ $hasTarget = true; //如果楼主要输出,就输出 $position = $i; } $sum += $v; } $avg1 = ($sum - $max - $min)/($count -2); $avg1 = ($sum - $minSec - $min)/($count -2); echo $min; echo '<br>'; echo $minSec; echo '<br>'; echo $max; echo '<br>'; echo $position; echo '<br>'; var_dump($ltBothArr); 其他的你自己写吧,好好看看数组的用法,其实用不着那么复杂!$data = $hand = array(213,3245,556,67,43,434,42,45,654,32,46,8,9,4,32);asort($data);echo 'MIN:',key($data),'=>',current($data),"\n";end($data);echo 'MAX:',key($data),'=>',current($data),"\n";reset($hand);echo 'LEFT:',key($hand),'=>',current($hand),"\n";end($hand);echo 'RIGHT:',key($hand),'=>',current($hand),"\n";//去除最大值和最小值,求平均值reset($data);//去除最大值$d = array_pop($data);//去除最小值arsort($d);$d = array_pop($d);//平均值echo array_sum($d)/count($d); 谢谢大家踊跃回帖,但我想要的是for循环的编辑方法!↖(^ω^)↗ 定义几个变量 for 比较 前面一个后面一个 ... ... 请大家用for循环完整的写出来O(∩_∩)O谢谢 上海php人员薪水? ecshop本地登录后台,输入用户和密码时候没有反应 求助PHP高手 php post数组的问题 毫无疑问,mysql的chm手册最差 php+apach支持中文吗? mysql_affected_rows的困惑 ■■菜鸟问题?PHP如何连接使用多个数据库?? Php5使用哪种模版技术最好? header函数问题:用它可以下载多大的文件? PHP连接MYSQL 结果网页无法显示(windows7) 如何从外网访问局域网内的某台机子上的网站?只要在路由器上设置映射吗?
$hand = array(213,3245,556,67,43,434,42,45,654,32,46,8,9,4,32);
$max = $min = $minSec = $avg1 = $avg2 = $hang[0]; //最大值,最小值 ,第二小值,平均值一,平均值二
$gtBothNum = 0; //比两边都大的数个数
$ltBothArr = array(); //比两边都小的数集合
$target = 5; //指定的值,假定为5
$hasTarget = false; //指定值是否存在
$sum = $count = 0; //总和
foreach($hand as $i=>$v){
$count++;
if($v > $max){
$max = $v;
}
if($v <= $min){
$minSec = $min;
$min = $v;
}elseif($v <= $minSec){
$minSec = $v;
}
if(isset($hand[$i-1])&& isset($hand[$i+1])){ // 假定第一个和最后一个不符合楼主要求
if($hand[$i-1] < $v && $v < $hand[$i+1]){
$gtBothNum++;
}
if($hand[$i-1] > $v && $v > $hand[$i+1]){
$ltBothArr[] = $v; //如果楼主要输出,在这里输出就行了
}
}
if($v == $target){
$hasTarget = true; //如果楼主要输出,就输出
}
$sum += $v;
} $avg1 = ($sum - $max - $min)/($count -2);
$avg1 = ($sum - $minSec - $min)/($count -2); //时间复杂度为n
//吃饭去了 没有测试,楼主自己测试一下
修改后如下:$hand = array(213,3245,556,67,43,434,42,45,654,32,46,8,9,4,32);
$max = $min = $minSec = $avg1 = $avg2 = $hand[0]; //最大值,最小值 ,第二小值,平均值一,平均值二
$gtBothNum = 0; //比两边都大的数个数
$ltBothArr = array(); //比两边都小的数集合
$target = 5; //指定的值,假定为5
$hasTarget = false; //指定值是否存在
$sum = $count = 0; //总和
$position = -1;
foreach($hand as $i=>$v){
$count++;
if($v > $max){
$max = $v;
}
if($v <= $min){
$minSec = $min;
$min = $v;
}elseif($v <= $minSec){
$minSec = $v;
}
if(isset($hand[$i-1])&& isset($hand[$i+1])){ // 假定第一个和最后一个不符合楼主要求
if($hand[$i-1] < $v && $v > $hand[$i+1]){
$gtBothNum++;
}
if($hand[$i-1] > $v && $v < $hand[$i+1]){
$ltBothArr[] = $v; //如果楼主要输出,在这里输出就行了
}
}
if($v == $target){
$hasTarget = true; //如果楼主要输出,就输出
$position = $i;
}
$sum += $v;
} $avg1 = ($sum - $max - $min)/($count -2);
$avg1 = ($sum - $minSec - $min)/($count -2);
echo $min;
echo '<br>';
echo $minSec;
echo '<br>';
echo $max;
echo '<br>';
echo $position;
echo '<br>';
var_dump($ltBothArr);
asort($data);
echo 'MIN:',key($data),'=>',current($data),"\n";
end($data);
echo 'MAX:',key($data),'=>',current($data),"\n";reset($hand);
echo 'LEFT:',key($hand),'=>',current($hand),"\n";
end($hand);
echo 'RIGHT:',key($hand),'=>',current($hand),"\n";//去除最大值和最小值,求平均值
reset($data);
//去除最大值
$d = array_pop($data);
//去除最小值
arsort($d);
$d = array_pop($d);
//平均值
echo array_sum($d)/count($d);
↖(^ω^)↗
定义几个变量 for 比较 前面一个后面一个 ... ...
O(∩_∩)O谢谢