2015-10-11 129 views
-5

我有作業,您必須在n個元素中找到兩個最大的數字(元素數量是'a')但我似乎無法找到第二大數字。你能幫我麼?謝謝查找N個元素中的兩個最大數字

#include<stdio.h> 

int main() 
{ 
int a, c, i; 
int b; 
b=0; 
c=0; 

scanf(" %d",&a); 
for(i=2;i<=a;i++) //find the biggest number 
{ 
scanf("%d",&c); 

if(b<c) 
b=c;  
} 
if (a > c) //Here I cant find my second biggest number 
c = a; 
printf("%d %d", b, c);  
return 0; 
} 
+2

這應該是「通過非常努力地思考解決問題」的情況。不,讓我處理我缺乏注意力的問題。 –

+2

給你的變量賦予描述性的名字,所以你最終不會像'a> c'這樣愚蠢的東西。 –

+1

http://stackoverflow.com/questions/31521096/find-second-highest-number-without-using-array – BLUEPIXY

回答

1

這是一個小程序,它將查找數組中的最大值和第二大值。

從中取得的相關位是它每次掃描一個元素數組並將其與當前「最大值」進行比較。如果數組中的值較大,則將其存儲爲新的最大值。在存儲之前,它將舊的最大值複製爲新的「第二大值」。

[編輯:我已更新算法來處理第二大值永遠不會被設置的情況。例如輸入集合{2,1}。此外,我更新它來處理負數。]

#include <stdio.h> 
#include <limits.h> 

int myArray [] = {2,5,9,1,7,13,3,11}; 

#define NumElements(array) sizeof(array)/sizeof(array[0]) 

int main(int argc, const char * argv[]) 
{ 

    int i; 
    int largest = INT_MIN; 
    int secondLargest = INT_MIN; 

    for(i=0; i<NumElements(myArray); i++) 
    { 
     if(myArray[i] > largest) 
     { 
      secondLargest = largest; 
      largest = myArray[i]; 
     } 
     else if(myArray[i] > secondLargest) 
     { 
      secondLargest = myArray[i]; 
     } 
    } 

    printf("largest: %d\n", largest); 
    printf("second largest: %d\n", secondLargest); 

    return 0; 
} 
+0

我已經更新了算法來處理第二大值永遠不會被設置的情況。例如輸入集合{2,1}。此外,我更新它來處理負數。 – waterjuice

+0

更好。一個小想法:首先對'secondLargest'進行測試的優點是每次通過循環時只需要1次測試。 – chux

+0

你可以改變它的程序來檢測n個元素中最大的兩個數字嗎?就像你可以輸入你想要的任何7個數字 –

相關問題