1. 程式人生 > >藍橋杯 演算法提高 ADV-100 第二大整數 邏輯判斷 迴圈語句

藍橋杯 演算法提高 ADV-100 第二大整數 邏輯判斷 迴圈語句

演算法提高 第二大整數
時間限制: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;
}