Module: (C++) Đối với toán tử vòng lặp. Nhiệm vụ tiêu biểu


Problem

13 /16


tối đa thứ hai

Theory Click to read/hide

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 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á 105 modulo. 

Dấu ấn
In phần tử tối đa thứ hai.

 

Ví dụ
<đầu>
# Đầu vào Đầu ra
1 7
10
15
20
35
14
35
10
35
2 5
10
5
7
11
9
10