1186: 零起点学算法93——改革春风吹满地(C)
一、题目
http://acm.wust.edu.cn/problem.php?id=1186&soj=0
二、分析
- 多组输入,‘0’结束;
- 顶点的个数在3至100之间;
- 一定顺序输入坐标;
- 坐标为int型整数;
- 多边形面积计算有两种思路:方法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)。

方法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)的更多相关文章
- Problem C: 零起点学算法93——矩阵转置
#include<stdio.h> int main() { ][],b[][]; while(scanf("%d%d",&n,&m)!=EOF) { ...
- 1164: 零起点学算法71——C语言合法标识符(存在问题)
1164: 零起点学算法71——C语言合法标识符 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 10 ...
- 1163: 零起点学算法70——Yes,I can!
1163: 零起点学算法70--Yes,I can! Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: ...
- 1147: 零起点学算法54——Fibonacc
1147: 零起点学算法54--Fibonacc Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 20 ...
- 1145: 零起点学算法52——数组中删数II
1145: 零起点学算法52--数组中删数II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 293 ...
- 1137: 零起点学算法44——多组测试数据输出II
1137: 零起点学算法44--多组测试数据输出II Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: ...
- 1136: 零起点学算法43——多组测试数据输出I
1136: 零起点学算法43--多组测试数据输出I Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitted: ...
- 1135: 零起点学算法42——多组测试数据(求和)IV
1135: 零起点学算法42--多组测试数据(求和)IV Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted ...
- 1134: 零起点学算法41——多组测试数据(a+b)III
1134: 零起点学算法41--多组测试数据(a+b)III Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitt ...
随机推荐
- class的三元表达式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- GitLab安装及备份迁移数据
centos7安装GitLab 下载相应版本rpm包 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 我此处下载9.3.6版本. # w ...
- 2.linux的增删改查
一.增删改查 1.建立文件和目录 mkdir /tmp/xueying 2.cd 进入的路径 绝对路径:以根目录为其实目录的路径 ...
- 亚马逊AWS服务器CentOS/Linux系统Shell安装Nginx及配置自启动
领了一个亚马逊的1年免费服务器,今天尝试安装 Nginx 服务器,使用原生的 Shell 方法. 为了方便以后查看,就把过程记录一下. 注意:亚马逊(AWS)服务器默认只能用 user-ec2 账户进 ...
- tomcat注册成服务
1>修改"bin\service.bat"文件 服务名:下图中的SERVICE_NAME 服务显示名称:下图中的DISPLAYNAME 服务描述:Description 2& ...
- Linux 下kafka集群搭建
主机的IP地址: 主机IP地址 zookeeper kafka10.19.85.149 myid=1 broker.id=110.19.15.103 myid=2 broker.id=210.19.1 ...
- Qt编写自定义控件46-树状导航栏
一.前言 树状导航栏控件是所有控件中最牛逼最经典最厉害的一个,在很多购买者中,使用频率也是最高,因为该导航控件集合了非常多的展示效果,比如左侧图标+右侧箭头+元素前面的图标设置+各种颜色设置等,全部涵 ...
- CentOS7下JSP连接Mysql
实验环境如下: youxi1 CentOS7.5 Tomcat8.5.35 192.168.5.101 youxi2 CentOS7.5 Mysql5.7.20 192.168.5.102 (1).下 ...
- Centos7安装php5.6并配置php-fpm协同工作
yum install epel-release rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm yum in ...
- (二)Centos之在VM虚拟机中安装Centos操作系统
一.下载 阿里云镜像 https://mirrors.aliyun.com/centos/7/isos/x86_64/ 下载那个 DVD版本即可. 二.安装 在安装操作系统之前 我们来给这个“机器”搞 ...