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 ...
随机推荐
- BZOJ3262陌上花开
三维偏序的模板. 当然各种树套树都可以搞,这里用CDQ分治弄一下. 首先利用排序使第一维有序,然后利用cdq函数开始执行类似归并排序的操作,由于左区间的第一维一定小于右区间的第一维,所以我们在归并过程 ...
- Java核心复习——synchronized
一.概念 利用锁机制实现线程同步,synchronized关键字的底层交由了JVM通过C++来实现 Java中的锁有两大特性: 互斥性 同一时间,只允许一个线程持有某个对象锁. 可见性 锁释放前,线程 ...
- [Andorid] 通过JNI实现kernel与app进行spi通讯
CPU:RK3399 系统:Android 7.1 人脸识别的要求越来越高,因此主板增加了 SE 加密芯片,加密芯片通过 spi 接口与 CPU 通讯. 对于 kernel 层的代码,Linux 原始 ...
- 使用 Fiddler 抓取iPhone 的 HTTPS 请求
Fiddler 是著名的 HTTP(S) 抓包工具,功能十分强悍.Fiddler 采用代理的方式进行抓包,所以使用范围就非常广泛,不仅可以在 PC 端使用,更可以在移动设备上使用. 要在 iPhone ...
- 计算机基础——Java笔记一
电子管-晶体管 摩尔定律 18个月变一次 贝尔实验室 C语言是基础.芯片领域软件领域 机器语言 ——汇编语言——高级语言 (面向过程,面向对象) 基本的逻辑怎么用代码实 ...
- Java 关于日期加一天(日期往后多一天)
1.原来Java的日期添加不像.NET的.Add: import java.util.Date ; Date date=new Date();//取时间System.out.println(dat ...
- javaScript(拼写树形)+ajax请求,去后台查找数据
第一步:页面加载完成时,利用jquery中的一函数,调用js方法,js方法,发送ajax请求,去后台查找父类权限集合,响应回来json格式的数据,对数据进行操作,往页面上添加内容 //页面初始化加载菜 ...
- 连接池大小调优 原创: ImportNew ImportNew 2017-06-07
连接池大小调优 原创: ImportNew ImportNew 2017-06-07
- SQL-W3School-函数:SQL SUM() 函数
ylbtech-SQL-W3School-函数:SQL SUM() 函数 1.返回顶部 1. SUM() 函数 SUM 函数返回数值列的总数(总额). SQL SUM() 语法 SELECT SUM( ...
- SVG动画示例
package com.loaderman.customviewdemo; import android.graphics.drawable.Animatable; import android.os ...