题目描述:
对于一个 n个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
例如,六边形:
输入格式
输入只有一行一个整数 n,代表边数。
输出格式
输出一行一个整数代表答案。
说明/提示
数据规模与约定
- 对于50% 的数据,保证 3≤n≤100;
- 对于100% 的数据,保证 3≤n≤10^5。
解题思路:
1.数学几何问题:多边形对角线交点个数:
三个思路:①两条对角线集中于一点,不会出现三条对角线交于一点;
②由两条对角线可确定多边形的四个顶点,得到四个顶点可形成一个交点的结论;
③至此,问题就转换成多边形n个顶点可以有多少种4个顶点可搭配了,由于四个顶点并不需要考虑顺序的问题,故可以选择组合的做法,即C(n,4)=n*(n-1)/2*(n-2)/3*(n-3)/4。
2.注意:①数据范围过大:若n的取值过大,那么结果出来很有可能是超出了基本整型等的取值范围,故选择类型为无符号双长整型-unsigned long long;
②技巧:使用公式时要防止爆掉,最好使用n*(n-1)/2*(n-2)/3*(n-3)/4。(我试过直接/24,没发现问题,但是有人出现过这类问题,可规避)
代码如下:
#include <stdio.h>
#include <cmath>
int main()
{
unsigned long long n,s; /*s为交点个数*/
scanf("%lld",&n);
s=n*(n-1)/2*(n-2)/3*(n-3)/4; /*计算公式*/
printf("%lld",s);
return 0;
}