1. 程式人生 > >第二大整數 藍橋杯 演算法提高

第二大整數 藍橋杯 演算法提高

問題描述

編寫一個程式,讀入一組整數(不超過20個),當用戶輸入0時,表示輸入結束。然後程式將從這組整數中,把第二大的那個整數找出來,並把它打印出來。
  說明:

  • (1)0表示輸入結束,它本身並不計入這組整數中。
  • (2)在這組整數中,既有正數,也可能有負數。
  • (3)這組整數的個數不少於2個。

輸入格式:

輸入只有一行,包括若干個整數,中間用空格隔開,最後一個整數為0。

輸出格式:

輸出第二大的那個整數。

輸入輸出樣例

樣例輸入
5 8 -12 7 0
樣例輸出
7

思路:

    迴圈輸入,輸入為0時停止,用選擇法進行排序,將第2大整數輸出

程式碼:

#include <stdio.h>
int main()
{
	int t,j,n,i=0,a[21];
	while(1)
	{
		scanf("%d",&a[i]);
		if(a[i]!=0){i++;continue;}		//輸入不為0則跳過本輪迴圈,再次輸入
		else 
		{
			n=i;		//記錄下整數個數,除0外
			for(i=0;i<n;i++)			//選擇排序,這裡也可以在第二輪迴圈時退出,優化演算法
				for(j=i+1;j<n;j++)
				{
					if(a[i]<a[j])t=a[i],a[i]=a[j],a[j]=t;		
				}
			break;
		}
	}
	printf("%d",a[1]);
return 0;
}