Tugas
N nombor diberikan. Cari elemen kedua terbesar dalam jujukan.
Masalah ini membenarkan dua tafsiran.
Sebagai contoh, jika kita diberi satu set nombor:
\(10\ 15\ 20\ 35\ 14\ 35\ 10\), maka apakah jawapan yang sepatutnya ?
Di bawah "elemen kedua terbesar" atau hanya "maksimum kedua", boleh difahami sebagai:
1) nilai yang akan berada di tempat kedua terakhir jika kita menyusun (mengisih) semua nilai dalam susunan tidak menurun (setiap yang berikutnya lebih besar daripada atau sama dengan yang sebelumnya). Kemudian untuk set nombor yang dipertimbangkan jawapannya ialah nilai 35;
2) nilai elemen, yang lebih besar daripada maksimum sahaja. Maka jawapannya ialah 20.
Jika terdapat hanya satu elemen maksimum dalam set nombor (semua yang lain kurang), maka kedua-dua tafsiran adalah sama, dan jawapannya akan sama untuk kedua-dua kes, jika tidak, jawapannya akan berbeza.
Pertimbangkan kes pertama (kami akan menulis algoritma pada
pseudokod).
Untuk mencari jawapan, kami akan menggunakan dua pembolehubah:
1)
maksimum1 - nilai maksimum (maksimum pertama);
2) maksimum2 - maksimum kedua (jawapan kami).
Jika julat nilai berubah diketahui, maka sebagai nilai awal kita mengambil nombor yang jelas kurang daripada had bawah julat (contohnya, dengan julat dari -1000
kepada 1000 - ambil nombor -1001
)
Jika julat nilai tidak diketahui, maka anda boleh menulis dua nombor input pertama ke dalam nilai awal pembolehubah max1
dan max2
, dan kemudian membandingkannya dua pembolehubah.
input N //bilangan nombor
input a, b
maks1 = a
maks2 = b
jika b > a, kemudian
maks1 = b
maks2 = a
Seterusnya, kami mempertimbangkan semua elemen lain (2 yang pertama telah dilihat, jadi kami akan bermula dari yang ke-3)
nc untuk i dari 3 hingga n
input a
jika a > maksimum1 //ada nilai yang lebih besar daripada maksimum1
Itu
max2 = max1 //bekas tinggi pertama menjadi kedua
max1 = a //elemen baharu akan menjadi maksimum pertama
sebaliknya
//elemen seterusnya tidak melebihi max1
// ia perlu dibandingkan dengan nilai maksimum2
jika a > maksimum 2
Itu
max2 = a //anggap ia sebagai nilai baharu max2
// max1 tidak berubah dalam kes ini
Semua
Semua
kts
Cuba laksanakan sendiri algoritma ini.