C/C++ 凸多边形求对角线交点的示例代码
#代码知识 发布时间: 2026-01-12
题目描述

对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
例如,6 边形:
这里可以注意到并没有出现多条对角线交叉在一个点的情况。
输入格式
输入只有一行一个整数 n,代表边数。
输出格式
输出一行一个整数代表答案。
数据规模与约定
这里给出一个特别的例子
输入是:
98765
输出是:
3964374251598225115
特别注意,在这种情况下,答案的值已经非常逼近longlong类型的最大表示范围,所以在计算的过程当中要特别注意,下面给出代码
#include <iostream>
using namespace std;
int main()
{
long long int n = 0;
cin >> n;
long long int answer = 0;
long long int temp = 1;
while (temp < (n - 2))
{
answer += temp * (n - temp - 2);
temp++;
}
if (n % 4 == 0)
{
n /= 4;
}
else if (n % 2 == 0)
{
n /= 2;
answer /= 2;
}
else
{
answer /= 4;
}
answer *= n;
cout << answer << endl;
return 0;
}
先选择一条对角线,将多边形分为两个部分,一边是一个点的,另一边是剩下的点,两边的点相连形成的对角线与所选择的对角线相交形成交点。
以此类推,现分为一边是1个点的,然后这一边的点逐渐增加,直到另外一边也只剩下一个点为止。需要特别注意的是,这样的每一组对角线都有n条,这样重复计算了比如点a到点b和点b到点a,其实是同一条。再根据题意,每个交点是由两个对角线形成的,而我们在计算点的时候用每条对角线都计算了一次,所以又重复计算了一遍。也就是说,这样我们得到的answer是最终正确answer的四倍。
特别注意,我将乘n的操作挪到了外面,把除以4的操作提前了,避免在运算的过程中出现数据上溢的情况。
上一篇 : 浅谈Nginx 中的两种限流方式
下一篇 : 记一次在idea离线使用maven问题(推荐)
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!