Rumah > Soal Jawab > teks badan
Buat penarafan markah pelajar
过去多啦不再A梦2017-05-16 13:18:24
<?php
$arr = [99,100,100];
$arr1=$arr;
rsort($arr1);
$c=[];
foreach ( $arr as $v){
$b= array_search($v, $arr1);
$c[]=$b+1;
}
print_r($c);
?>
Ini boleh memenuhi keperluan anda, tetapi saya mempunyai soalan yang kedua-duanya terikat untuk tempat pertama.
ringa_lee2017-05-16 13:18:24
Apa yang dikehendaki oleh penyoal ialah memaparkan kedudukan mengikut susunan susunan asal (boleh diikat). Idea umum adalah untuk menambah tatasusunan asal dengan maklumat kedudukan, dan kemudian membina tatasusunan kedudukan secara terbalik berdasarkan hasil yang disusun. Agak panjang untuk menulis:
get_ranks(a[1:n])
s ← array(n)
ranks ← array(n)
for i from 1 to n ▷ s[i] has record type
s[i] ← {position: i, value: a[i], rank: 0}
descending_sort(s by value) ▷ sort by s[i].value
s[1].rank ← 1
for i from 2 to n
if s[i].value < s[i-1].value ▷ dense rank
s[i].rank ← s[i-1].rank + 1
else
s[i].rank ← s[i-1].rank
for i from 1 to n ▷ construct result
ranks[s[i].position] ← s[i].rank
return ranks[]
Perhatikan bahawa jika terdapat berbilang orang ke-1 terikat untuk tempat ke-n, orang seterusnya akan menjadi orang ke-1, yang agak berbeza daripada contoh yang diberikan oleh penyoal. Kesesakan kerumitan keseluruhan algoritma adalah pengisihan, iaitu O(n lgn).
phpcn_u15822017-05-16 13:18:24
http://www.php.net/manual/zh/...
Isih data terbina dalam sepatutnya dapat menyelesaikan masalah anda
我想大声告诉你2017-05-16 13:18:24
Isih dahulu tatasusunan ini mengikut skor, kemudian masukkan semula tatasusunan ini. Kemudian baru dapatkan kunci mengikut markah.
Selain itu: markah anda tidak ditulis dalam pangkalan data, jadi ia dikeluarkan mengikut urutan