一、题目

http://acm.wust.edu.cn/problem.php?id=1186&soj=0

二、分析

  1. 多组输入,‘0’结束;
  2. 顶点的个数在3至100之间;
  3. 一定顺序输入坐标;
  4. 坐标为int型整数;
  5. 多边形面积计算有两种思路:方法A:切成三角形,计算面积,再累加所有三角形面积;方法B:多边形面积公式。

参考链接:方法A,方法B。

此处略加说明:

方法A:已知三点坐标分别为:(x1,y1),(x2,y2),(x3,y3)。三角形面积为:

方法B:坐标存储在x[100],y[100]。下标从0开始,则多边形面积为:

三、思路

方法A:如图,有5个点的凸多边形,将它以第一个点为基准切割成3个三角形分别计算面积,并累加得到五边形的面积。5个点坐标依次为:(2,1),(0,2),(-2,1),(-1,-1),(1,-2)。


图:1186

方法B:顶点个数用n表示,为0退出。顶点个数最多100个,坐标可用两个int型一维数组x[100],y[100]存储。将点的坐标全部带入公式计算面积。

备注:以上两种方法适用于所有多边形,包括凹多边形。

四、代码

方法A:

#include<stdio.h>
int main() {
int n, x1, y1, x2, y2, x3, y3;
float areaOfTriangle, areaOfPolygon; // 三角形面积,多边形面积
while (scanf("%d", &n) && n != 0) {
areaOfPolygon = 0;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2); // 输入前2个点的坐标
for(n -= 2; n > 0; n--) {
scanf("%d%d", &x3, &y3);
// 计算三角形面积
areaOfTriangle = 0.5 * (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2));
areaOfPolygon += areaOfTriangle; // 加到多边形的面积中
x2 = x3; // 以便计算下一个三角形面积
y2 = y3;
}
printf("%.1f\n", areaOfPolygon);
}
return 0;
}

方法B:

#include <stdio.h>
int main() {
int n, i, area, x[100], y[100];
while (scanf("%d", &n) && n != 0) {
for (i = 0; i < n; i++) {
scanf("%d%d", &x[i], &y[i]); // 输入所有坐标
}
for (area = 0, i = 0; i < n; i++) { // 初始化面积为0
area += (x[i] * y[(i + 1) % n] - y[i] * x[(i + 1) % n]); // 多边形面积公式
}
printf("%.1f\n", 0.5*area); // 输出面积
}
}

五、截图

数据1:3个点组成的三角形

数据2:4个点组成的凹多边形

数据3:5个点的凸多边形(图1186)

1186: 零起点学算法93——改革春风吹满地(C)的更多相关文章

  1. Problem C: 零起点学算法93——矩阵转置

    #include<stdio.h> int main() { ][],b[][]; while(scanf("%d%d",&n,&m)!=EOF) { ...

  2. 1164: 零起点学算法71——C语言合法标识符(存在问题)

    1164: 零起点学算法71——C语言合法标识符 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 10 ...

  3. 1163: 零起点学算法70——Yes,I can!

    1163: 零起点学算法70--Yes,I can! Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: ...

  4. 1147: 零起点学算法54——Fibonacc

    1147: 零起点学算法54--Fibonacc Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 20 ...

  5. 1145: 零起点学算法52——数组中删数II

    1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 293 ...

  6. 1137: 零起点学算法44——多组测试数据输出II

    1137: 零起点学算法44--多组测试数据输出II Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: ...

  7. 1136: 零起点学算法43——多组测试数据输出I

    1136: 零起点学算法43--多组测试数据输出I Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitted: ...

  8. 1135: 零起点学算法42——多组测试数据(求和)IV

    1135: 零起点学算法42--多组测试数据(求和)IV Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted ...

  9. 1134: 零起点学算法41——多组测试数据(a+b)III

    1134: 零起点学算法41--多组测试数据(a+b)III Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitt ...

随机推荐

  1. WPF中打开网页的两种方法

    1.浏览器打开 Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "http://www. ...

  2. [Shell]CVE-2019-0708漏洞复现及修复补丁

    0x01 漏洞原理 Windows系列服务器于2019年5月15号,被爆出高危漏洞,该漏洞影响范围较广,windows2003.windows2008.windows2008 R2.windows 7 ...

  3. O缺缺缺缺氧 O缺缺氧

    2019 1.18 优雅的退出/关闭/重启gunicorn进程 Ubuntu查看端口占用情况 微信小程序解决 加载图片出现渲染层网络层错误 更改Ubuntu默认python版本的方法 JS/HTML格 ...

  4. linux 之oracle静默安装

    一.安装前准备工作1.修改主机名#vi /etc/hosts   //并添加内网IP地址对应的hostname,如下127.0.0.1           localhost::1           ...

  5. svn add 命令 递归目录下所有文件

    svn add 命令 递归目录下所有文件 摘自:https://blog.csdn.net/yefl007/article/details/46506281 即使被忽略了也可以使用此命令. svn a ...

  6. 一百三十九:CMS系统之首页帖子列表布局

    # 配置ueditor上传文件到七牛UEDITOR_UPLOAD_TO_QINIU = True # 设置为True是,视为开始把图片传到七牛储存,本地不储存UEDITOR_QINIU_ACCESS_ ...

  7. poi导出excel2007版本

    /** * 导出excel2007版本 * * @param titles * 表头集合 * @param sheetNames * sheet名称 * @param datas * 数据集合 * @ ...

  8. 123457123456#0#-----com.yuming.baoBaoAiXueXi01hanzi--前拼后广--幼儿园宝宝学汉字

    123457123457#0#-----com.yuming.baoBaoAiXueXi01hanzi--前拼后广--幼儿园宝宝学汉字

  9. Django之model补充:一对多、跨表操作

    表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...

  10. 关于采样率&位深&码率&无损的一些心得

    转载自:https://blog.csdn.net/Marenow/article/details/85253283 记笔记,记下来自己的一些关于音频基础知识的总结. 采样率外界的声音都是模拟信号,在 ...