找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 765|回复: 0

[代码] 任意多边形面积计算(ACM大赛提交题目)

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2016-10-18 20:42:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. #include <stdio.h>
  2. #include <math.h>

  3. struct point {
  4.   float x;
  5.   float y;
  6. } ptfirst, pt1, pt2, pt0={0, 0};

  7. float triangsize(struct point pt0, struct point pt1, struct point pt2);

  8. int main(void)
  9. {
  10.   int n;

  11.   while (scanf("%d", &n) && n>=3) {
  12.     float sum=0, amount, length;

  13.     scanf("%f %f", &pt1.x, &pt1.y);
  14.     scanf("%f %f", &pt2.x, &pt2.y);
  15.     ptfirst = pt1;          // 保存起始点
  16.     sum += triangsize(pt0, pt1, pt2);
  17.     n -= 2;              // 已读取2行
  18.     for ( ; n>0; n--) {
  19.       pt1 = pt2;
  20.       scanf("%f %f", &pt2.x, &pt2.y);
  21.       sum += triangsize(pt0, pt1, pt2);
  22.     }
  23.     sum += triangsize(pt0, pt2, ptfirst);
  24.     sum = (float)fabs(sum);
  25.     scanf("%f", &amount);
  26.     length = amount / sum;
  27.     printf("BAR LENGTH: %.2f\n", length);
  28.   }

  29.   return 0;
  30. }

  31. float triangsize(struct point pt0, struct point pt1, struct point pt2)
  32. {
  33.   return ((pt0.x*pt1.y + pt1.x*pt2.y + pt2.x*pt0.y) - (pt2.x*pt1.y + pt1.x*pt0.y + pt0.x*pt2.y)) * 0.5f;
  34. }

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-22 11:01 , Processed in 0.376038 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表