最大线段问题

经典问题

数学解法

举个例子,现在有 \(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);
	}
}

求个推文+关注

posted @ 2024-05-13 20:38  Hongfr  阅读(10)  评论(0)    收藏  举报