hdu_problem_2036_改革春風吹滿地

/*
*
*Problem Description
*“ 改革春風吹滿地,
*不會AC沒關係;
*實在不行回老家,
*還有一畝三分地。
*謝謝!(樂隊奏樂)”
*
*話說部分學生心態極好,每天就知道遊戲,這次考試如此簡單的題目,也是雲裏霧裏,而且,還竟然來這麼幾句打油詩。
*好呀,老師的責任就是幫你解決問題,既然想種田,那就分你一塊。
*這塊田位於浙江省溫州市蒼南縣靈溪鎮林家鋪子村,多邊形形狀的一塊地,原本是linle 的,現在就準備送給你了。不過,任何事情都沒有那麼簡單,你必須首先告訴我這塊地到底有多少面積,如果回答正確才能真正得到這塊地。
*發愁了吧?就是要讓你知道,種地也是需要AC知識的!以後還是好好練吧...
*
*
*Input
*輸入數據包含多個測試實例,每個測試實例佔一行,每行的開始是一個整數n(3<=n<=100),它表示多邊形的邊數(當然也是頂點數),然後是按照逆時針順序給出的n個頂點的座標(x1, y1, x2, y2... xn, yn),爲了簡化問題,這裏的所有座標都用整數表示。
*輸入數據中所有的整數都在32位整數範圍內,n=0表示數據的結束,不做處理。
*
*
*Output
*對於每個測試實例,請輸出對應的多邊形面積,結果精確到小數點後一位小數。
*每個實例的輸出佔一行。
*
*
*Sample Input
*3 0 0 1 0 0 1
*4 1 0 0 1 -1 0 0 -1
*0
*
*
*Sample Output
*0.5
*2.0
*
*
*Author
*lcy
*
*
*Source
*ACM程序設計期末考試(2006/06/07)
*
*
*Recommend
*lcy
*
*/
#include<iostream>
using namespace std;
struct point {
 int x, y;
}p[100];
float area(int x1, int y1, int x2, int y2) {
 return x1 * y2 - x2 * y1;
}
int main() {
 int n, k;
 float result;
 while (cin >> n) {
  result = 0;
  if (n == 0)
   break;
  for (int i = 0; i < n; i++) {
   cin >> p[i].x >> p[i].y;
  }
  result += area(p[n - 1].x, p[n - 1].y, p[0].x, p[0].y);
  for (int i = 0; i < n - 1; i++) {
   result += area(p[i].x, p[i].y, p[i + 1].x, p[i + 1].y);
  }
  result /= 2;
  printf("%.1f\n", result);
 }
 system("pause");
 return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章