最大线段问题
经典问题
数学解法
举个例子,现在有 \(3\) 个点:
- 第一个点,可以连接 \(2,3\) 个点。
- 第二个点,可以连接 \(3\) 点。
最多一共有 \(3\) 个线段。
如果有 \(4\) 个点:
- 第一个点,连接 \(2,3,4\) 点。
- 第二个点,连接 \(3,4\) 点。
- 第三个点,连接 \(4\) 点。
最少一共有 \(6\) 个点线段。
……
不难发现,这不就是等差数列吗?公差为 \(1\) 。
首相是点数-1 ,即 \(n-1\);末相是 \(1\),项数即 \(n-1\)。
那么最多线段的公式就是 \([(n-1)+1] \times (n-1) \div 2\) 。
化简后答案为 \(n \times (n-1) \div 2\)。
C++写法
很不幸,你不单单是初一学者,还是一个竞赛班的学生。
公式都出来了,剩下的自己写吧
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int T;
long long int n;
int main()
{
scanf("%d",&T);
while (T--)
{
scanf("%lld",&n);
printf("%lld\n",n*(n-1)/2);
}
}