藍橋杯 演算法提高 ADV-100 第二大整數 邏輯判斷 迴圈語句
阿新 • • 發佈:2019-01-05
演算法提高 第二大整數
時間限制:1.0s 記憶體限制:512.0MB
問題描述
編寫一個程式,讀入一組整數(不超過20個),當用戶輸入0時,表示輸入結束。然後程式將從這組整數中,把第二大的那個整數找出來,並把它打印出來。說明:(1)0表示輸入結束,它本身並不計入這組整數中。(2)在這組整數中,既有正數,也可能有負數。(3)這組整數的個數不少於2個。
輸入格式:輸入只有一行,包括若干個整數,中間用空格隔開,最後一個整數為0。
輸出格式:輸出第二大的那個整數。
輸入輸出樣例
樣例輸入
5 8 -12 7 0
樣例輸出
7
思路:
首先,用while迴圈輸入,遇到0跳出迴圈;
其次,將輸入的一組數進行排序;
最後,輸出第二大的數。
分析:
C++中有一個很有用的類叫set,set是集合,⼀個set里面的各元素是各不相同的,而且set會按照元素自動進行從小到大排序。利用set的特性,雖然效率並不高,但刷題還是很方便的,尤其是這種本來就數量級很小的題。程式碼如下:
#include <iostream> #include <set> using namespace std; int main() { set<int> a; int num; cin >> num; while(num) //將數放在集合裡,遇到0跳出迴圈 { a.insert(num); cin >> num; } set<int>::iterator it = a.end(); //初始化迭代器it指向集合中最後一個元素的下一個位置。 it--, it--; //由於集合元素由小到大排列,使迭代器前移2位,即指向第二大數 cout << *it << endl; return 0; }