2014-01-19 62 views
0

輸入應該是n - 三角形的數量(1 < = n < = 20),然後n行每個三個雙打(對應於每個三角形的邊) 。輸出應該是具有最大三角形面積的「n」。如何在C++中給定三角形中找到最大面積

#include <iostream> 
#include <math.h> 
using namespace std; 

const int MAX_SIZE = 20; 

int main() 
{ 
    int n, s, p; 
    double max = 0; 
    cin >> n; 
    int x[MAX_SIZE]; 
    for (int i = 0; i < n; i++) 
    { 
     double y[2]; 
     for (int j = 0; j < 3; j++) 
      cin >> y[j]; 
     p = (y[0] + y[1] + y[2])/2; 
     s = sqrt(p * (p - y[0]) * (p - y[1]) * (p - y[3])); 
     if (s >= max) max = s; 
    } 
    cout << max; 
    return 0; 
} 

這就是我迄今爲止所做的。順便說一句,「p」代表semiparameter。 - 我使用Heron的公式。我甚至都沒有把它的範圍設置爲「最大」,而是最大面積本身,但它不起作用,但卻給我一個巨大的錯誤。有任何想法嗎?

+0

**第一次**編寫計算三角形面積的代碼,並編寫可在序列中查找最大值的代碼。 *當這兩部分工作完美時,*然後**將它們組合。 – Beta

回答

1

你有幾個問題:

  • 你需要從int換個spdouble S(否則你會得到你的結果不需要截斷)。
  • 您需要將double y[2];更改爲double y[3];(因爲您需要三個邊長,而不是兩個)。
  • s = sqrt(p * (p - y[0]) * (p - y[1]) * (p - y[3]));更改爲s = sqrt(p * (p - y[0]) * (p - y[1]) * (p - y[2]));(因爲y[3]超出了您的數組範圍)。

還要注意,你可以擺脫你的數組x,因爲你似乎並沒有在任何地方使用它。

+0

謝謝!我回答我的線索是指一個新問題。你能幫我嗎?我在評論這件事,因爲我不知道你是否收到我的答覆通知。我在這裏有點新。 – user3213110

1

你只分配2個雙打。你需要3,試試double y[3]