P2181 对角线

【今日逼逼】
这题有点偏技巧性了,如果知道那个公式的话,可能代码量会少一点。
P2181 对角线
题目如下:
题目描述
对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。

例如,6边形:
在这里插入图片描述
输入格式
输入只有一行一个整数 n,代表边数。

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

输入输出样例
输入 #1
3
输出 #1
0
输入 #2
6
输出 #2
15

说明/提示
数据规模与约定
对于 50% 的数据,保证3≤n≤100
对于 100% 的数据,保证3≤n≤10^5

源代码:
#include<stdio.h>
int main()
{
unsigned long long N;
scanf("%d",&N);
printf("%lld",N*(N-1)/2*(N-2)/3*(N-3)/4);
return 0;
}

程序运行图:
在这里插入图片描述
在这里插入图片描述
这道题有一个公式: n (n-1) (n-2) (n-3) / 24
但是在运行的时候最好写成 N*(N-1)/2*(N-2)/3*(N-3)/4这种形式,不然即使用unsigned long long 也会超出范围。
注意:因为n和n-1一定有一个是2的倍数,所以2可以除尽;同理,n、n-1、n-2中一定有一个是3的倍数,所以3也可以除尽;
同理4也可以除尽。

其次,关于这个公式如何推导:
首先由题目意思得:
不会有三条对角线交于一点,所以过某一个交点有且只能有2条对角线,而这两条对角线实质上是确定了4个顶点(也可以看做是一个四边形的两条对角线交于一点,求四边形的数量)。

因此我们只需要确定4个顶点就得到了这个唯一确定的交点。

因此我们只需要求这样4个顶点的搭配有多少个了

也就是从n个顶点中取4个出来。

根据组合数的公式,(如果你不知道组合数的公式可以这么推:第一次取可以n个点都是可以取的,第二次取的时候第一个取的点就不能取了,所以只能取(n-1)种,以此类推)

由于改变四个点的顺序不会改变对角线,因此是求的组合而不是排列,也就要除以4!,也就是24

于是我们就得到了公式: n (n-1) (n-2) * (n-3) / 24

输出用unsigned long long

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值