如何在php中获得最大正值大于0
问题描述:
我想从数组中找到最小值,并从所有元素中减去该值,直到所有元素都变为0为止。问题是,如果数组包含元素之一作为0,那么它不反映任何东西。提前致谢。如何在php中获得最大正值大于0
<?php
$handle = fopen ("php://stdin","r");
fscanf($handle,"%d",$n);
$arr_temp = fgets($handle);
$arr = explode(" ",$arr_temp);
array_walk($arr,'intval');
for($j=0;$j<10;$j++)
{
$min = min($arr);
for($i=0;$i<count($arr);$i++)
{
if($arr[$i]>=$min)
$arr[$i]-=$min;
echo $arr[$i]." ";
}
echo "\n";
}
?>
答
使用array_filter(),再加上功能即使数组包含值为零的元素,你可以得到的最小非零正整数,如下所示:
<?php
$arr = array(0, 1, 2, 3, 4, 0, 5, 6, 4, 3, 2, 1,0);
function getMin($a) {
$arr_filtered = array_values(array_filter($a));
return min($arr_filtered);
}
$min = getMin($arr);
$count = count($arr);
while(count(array_unique($arr)) > 1) {
for($i = 0; $i < $count; $i++)
{
if($arr[$i] >= $min){
$arr[$i] -= $min;
echo $arr[$i]." ";
}
}
echo "\n";
}
请参阅demo
请注意,代码使用array_values()重新为getMin()中的过滤数组编码索引。
只要最小值是一个,上面的脚本就能正常工作。但是,如果最小值是另一个数字,则需要调整代码。下面的脚本处理一个具有不同的最小值四个阵列中,每个构成多维数组,包括一个具有负的值:
<?php
error_reporting(E_ALL);
$a = [ [0,1, 2, 3, 4, 0, 5, 6, 4, 3, 2, 1,0],
[0, 2, 3, 4, 0, 5, 6, 4, 3, 2, 0],
[0, 3, 4, 0, 5, 6, 7,8,4, 3, 0],
[-1,0,1,2,3,4,2,1,0,-1]
];
function getMin($a) {
return min($a);
}
foreach ($a as $arr) {
while(($arr != null) ) {
$arr = array_values(array_filter($arr));
if ($arr == null) {
break;
}
$min = getMin($arr);
foreach ($arr as &$e) {
$e -= $min;
}
unset($e);
echo join(" ",$arr),"\n";
}
echo "\n";
}
看到demo
注意,第二脚本明确地滤掉零值在每个阵列中,而第一个脚本有效地这样做。这两个脚本之间的主要区别在于,getMin()需要位于while循环中,以便在最小数大于1或负数时正确执行减法。
该脚本还通过几种方式简化了代码。 while循环的更简单条件 - 只要数组不为空即可。代码不再需要getCount(),因为我将减法循环改为使用foreach和随后未设置的引用变量 - 这对于避免问题很重要。这个foreach循环也不需要if条件的第一个脚本。
答
我不知道很多关于PHP,但在第一for
循环中,您应检查数组的元素,如果他们是零或者是不使用if语句,例如if(arr[j]!=0)
for($j=0;$j<10;$j++)
{
if($arr[$j]!=$0)
$min = min($arr);
for($i=0;$i<count($arr);$i++)
{
if($arr[$i]>=$min)
$arr[$i]-=$min;
echo $arr[$i]." ";
}
echo "\n";
}
答
这是因为你采取每个时间的价值,并且它变成0这就是为什么你的代码不工作。 尝试下面的代码
$min = min($arr);
for($j=0;$j<=100;$j++)
{
if (count(array_unique($arr)) === 1 && end($arr) === 0) {
break;
}
for($i=0;$i<count($arr);$i++)
{
if($arr[$i] >= $min){
$arr[$i]-=$min;
echo $arr[$i]." ";
}
}
echo "<br>";
}
告诉我们你的代码 – webpic
忽略0值?如果($ var === 0)继续; ? –
看到这里:http://stackoverflow.com/questions/6748836/min-function-that-ignores-negative-values-in-php –