Nhiệm vụ
N số đã cho. Tìm phần tử lớn thứ hai trong một dãy.
Vấn đề này có hai cách hiểu.
Ví dụ: nếu chúng ta được cung cấp một bộ số:
\(10\ 15\ 20\ 35\ 14\ 35\ 10\), thì câu trả lời sẽ là gì ?
Dưới "phần tử lớn thứ hai" hay đơn giản là "cực đại thứ hai", có thể hiểu là:
1) giá trị sẽ ở vị trí áp chót nếu chúng ta sắp xếp (sắp xếp) tất cả các giá trị theo thứ tự không giảm (mỗi giá trị tiếp theo lớn hơn hoặc bằng giá trị trước đó). Khi đó, đối với tập hợp số được xét, câu trả lời sẽ là giá trị 35;
2) giá trị của phần tử, lớn hơn giá trị lớn nhất. Vậy đáp số là 20.
Nếu chỉ có một phần tử lớn nhất trong tập hợp số (tất cả các phần tử khác nhỏ hơn), thì cả hai cách hiểu đều giống nhau và câu trả lời sẽ giống nhau cho cả hai trường hợp, nếu không thì câu trả lời sẽ khác.
Xem xét trường hợp đầu tiên (chúng tôi sẽ viết thuật toán trên
mã giả).
Để tìm câu trả lời, chúng ta sẽ sử dụng hai biến:
1)
maximum1
- giá trị lớn nhất (tối đa đầu tiên);
2)
maximum2
- giá trị lớn thứ hai (câu trả lời của chúng tôi).
Nếu biết phạm vi giá trị thay đổi, thì làm giá trị ban đầu, chúng tôi lấy một số rõ ràng nhỏ hơn giới hạn dưới của phạm vi (ví dụ: với phạm vi từ
-1000
đến
1000
- lấy số
-1001
)
Nếu phạm vi giá trị không xác định, thì bạn có thể viết hai số đầu vào thành giá trị ban đầu của các biến
max1
và
max2
rồi so sánh các giá trị này. hai biến.
đầu vào N // số lượng
đầu vào a, b
tối đa1 = một
tối đa2 = b
nếu b > một, sau đó
tối đa1 = b
tối đa2 = một
Tiếp theo, chúng tôi xem xét tất cả các yếu tố khác (2 yếu tố đầu tiên đã được xem, vì vậy chúng tôi sẽ bắt đầu từ yếu tố thứ 3)
nc cho tôi từ 3 đến n
nhập một
nếu một > max1 // có giá trị lớn hơn max1
Cái đó
max2 = max1 // mức cao đầu tiên trở thành mức cao thứ hai
max1 = a // phần tử mới sẽ là giá trị lớn nhất đầu tiên
nếu không thì
// phần tử tiếp theo không quá max1
// nó cần được so sánh với giá trị max2
nếu một > tối đa 2
Cái đó
max2 = a // lấy nó làm giá trị mới max2
// max1 không thay đổi trong trường hợp này
Tất cả
Tất cả
kts
Cố gắng tự thực hiện thuật toán này.
Problem
Cho các số nguyên
N
. Tìm phần tử lớn thứ hai của dãy (phần tử sẽ đứng sau nếu đầu vào được sắp xếp theo thứ tự không giảm dần).
Đầu vào
Dòng đầu tiên chỉ định số
N
(
\(2<=N<=10^4\)). Tiếp theo là
N
dòng, mỗi dòng một số nguyên không quá 10
5 modulo.
Dấu ấn
In phần tử tối đa thứ hai.
Ví dụ
<đầu>
# |
Đầu vào |
Đầu ra |
điều>
1 |
7
10
15
20
35
14
35
10 |
35 |
2 |
5
10
5
7
11
9 |
10 |
Запрещенные операторы: max
; min
; [
; sort