栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

洛谷P2181对角线题解(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

洛谷P2181对角线题解(C语言)

题目描述

对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。

例如,6 边形:

输入格式

输入只有一行一个整数n,代表边数。

输出格式

输出一行一个整数代表答案。

输入输出样例

输入3 输出0

输入6 输出15

说明/提示

数据规模与约定

  • 对于 50% 的数据,保证 3≤n≤100。
  • 对于100% 的数据,保证 3≤n≤1e5。

思路:

  • 首先,先来看一下对角线的求法:公式:n*(n-3)/2

原因:我们都知道对角线是由两个不相邻的顶点连线形成的,故有n*(n-3)中可能,但是会有重复,所以要除以2

  • 其次,我们再来看这个对角线交点问题

首先,两条对角线形成一个交点,要有两条对角线就必须有一个四边形,即就是在n个顶点中找4个顶点的组合,我们高中都学过排列组合,即4!

所以就可套公式n*(n-1)*(n-2)*(n-3)/4!

(这个公式的由来:第一次可以从n个顶点中取,但第二次只能从n-1个顶点中取,以此类推...由于四个点的顺序不会改变这个四边形,所以要除以4!) 

但是,这样在洛谷上会报错,因为n<=1e5,故这个式子n*(n-1)*(n-2)*(n-3)/4!直接爆long long,可以用这个巧妙转换:n*(n-1)*(n-2)*(n-3)/4!==n*(n-1)/2*(n-2)/3*(n-3)/4;

代码:

#include
int main(void)
{
    unsigned long long n,sum;
    scanf("%lld",&n);
    sum=n*(n-1)/2*(n-2)/3*(n-3)/4;
    printf("%lldn",sum);
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853650.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号