Детская головоломка с массивами..Помогите..у меня уже голова болит...
Присутствует ряд или массив как вам удобней.
a - a[1],a[2],...
У каждого элемента
есть порядковый номер i и число соответствующее этому номеру.
Нужно получить ряд или массив с последовательностью НОМЕРОВ!
(напр.: m[j] - m[1],m[2],m[3],m[4]...
, выставленных
по признаку убывания(или возрастания.Без разницы) значений данного ряда.
Например у нас есть простейший возрастающий ряд
a[1]=100
a[2]=200
a[3]=300
a[4]=400
...
a[100]=10000
в итоге, после сортировки(получаем последовательность номеров по признаку убывания значения ряда) ряда:
m[1]=100
m[2]=99
m[3]=98
...
m[100]=1
Я думаю что-то вроде такого:
Код:
<?
...
for(j++) {
a[j]=0;
for(i++){
if(a>a[j]){
m[j]=i;
a[j]=a;
}
}
}
...
?>
...
for(j++) {
a[j]=0;
for(i++){
if(a>a[j]){
m[j]=i;
a[j]=a;
}
}
}
...
?>
, ..но это лажа...
Код:
<?
$a[0]=100;
$a[1]=200;
$a[2]=30000;
$a[3]=400;
$a[4]=10000;
$result=Array();
for ($i=0;$i<count($a);$i++) $a[$i]=str_pad($a[$i],10,0,PAD_LEFT)."~~~".$i;
rsort($a);
for ($i=0;$i<count($a);$i++) {list(,$e)=explode("~~~",$a[$i]);$result[]=$e;}
for ($i=0;$i<count($a);$i++) print $result[$i]."
";
?>
$a[0]=100;
$a[1]=200;
$a[2]=30000;
$a[3]=400;
$a[4]=10000;
$result=Array();
for ($i=0;$i<count($a);$i++) $a[$i]=str_pad($a[$i],10,0,PAD_LEFT)."~~~".$i;
rsort($a);
for ($i=0;$i<count($a);$i++) {list(,$e)=explode("~~~",$a[$i]);$result[]=$e;}
for ($i=0;$i<count($a);$i++) print $result[$i]."
";
?>
Результат:
2
4
3
1
0
Цитата:
Originally posted by mike
Не совсем правильно с алгоритмической точки зрения, зато правильно с точки зрения быстрого написания на PHP:
Результат:
2
4
3
1
0
Не совсем правильно с алгоритмической точки зрения, зато правильно с точки зрения быстрого написания на PHP:
Код:
<?
$a[0]=100;
$a[1]=200;
$a[2]=30000;
$a[3]=400;
$a[4]=10000;
$result=Array();
for ($i=0;$i<count($a);$i++) $a[$i]=str_pad($a[$i],10,0,PAD_LEFT)."~~~".$i;
rsort($a);
for ($i=0;$i<count($a);$i++) {list(,$e)=explode("~~~",$a[$i]);$result[]=$e;}
for ($i=0;$i<count($a);$i++) print $result[$i]."
";
?>
$a[0]=100;
$a[1]=200;
$a[2]=30000;
$a[3]=400;
$a[4]=10000;
$result=Array();
for ($i=0;$i<count($a);$i++) $a[$i]=str_pad($a[$i],10,0,PAD_LEFT)."~~~".$i;
rsort($a);
for ($i=0;$i<count($a);$i++) {list(,$e)=explode("~~~",$a[$i]);$result[]=$e;}
for ($i=0;$i<count($a);$i++) print $result[$i]."
";
?>
Результат:
2
4
3
1
0
Выдает ошибку:
Use of undefined constant PAD_LEFT - assumed 'PAD_LEFT' Что делать? Может попроще метод есть, ато я в этом не разбираюсь..вооще
Код:
<?
$a[0]=100;
$a[1]=2000;
$a[2]=300;
$a[3]=4000;
$a[4]=500;
$tempmark="0"; // метка...
$n=array();//массив, в кот. нужно запсать окончательную последовательность
for($j=(count($a)-1);$j>=0;$j--) $n[$j]=count($a);
for($j=(count($a)-1);$j>=0;$j--) {
$tempr=0; //переменная, хранящая промежуточное значение
for($i=(count($a)-1);$i>=0;$i--){
if($a[$i]>=$tempr){
for($k=(count($a)-1);$k>=0;$k--)
if ($n[$k]==$i) $tempmark=1;//ищем совпадения...и ставим 1.
if (!($tempmark=="1")) {
$n[$j]=$i;
$tempr=$a[$i];
$tempmark="0";//не охота разбираться, но здесь бок..
}
$tempmark=0;
}
}
}
for($i=(count($a)-1);$i>=0;$i--) echo $n[$i]."
";
?>
$a[0]=100;
$a[1]=2000;
$a[2]=300;
$a[3]=4000;
$a[4]=500;
$tempmark="0"; // метка...
$n=array();//массив, в кот. нужно запсать окончательную последовательность
for($j=(count($a)-1);$j>=0;$j--) $n[$j]=count($a);
for($j=(count($a)-1);$j>=0;$j--) {
$tempr=0; //переменная, хранящая промежуточное значение
for($i=(count($a)-1);$i>=0;$i--){
if($a[$i]>=$tempr){
for($k=(count($a)-1);$k>=0;$k--)
if ($n[$k]==$i) $tempmark=1;//ищем совпадения...и ставим 1.
if (!($tempmark=="1")) {
$n[$j]=$i;
$tempr=$a[$i];
$tempmark="0";//не охота разбираться, но здесь бок..
}
$tempmark=0;
}
}
}
for($i=(count($a)-1);$i>=0;$i--) echo $n[$i]."
";
?>
Результат:
3
1
4
2
0