学习笔记2024.12.11

今天主要是完成函数的实验。通过今天的实验,记录一个知识点,这里和大家分享。

以下是习题

这种问题的求法我们可以看做一个知识点,即尼克彻斯定理。

根据题目,我们只需要找到第一个奇数,就可以依次找到并输出之后连续的奇数。而第一个奇数为m*m-m+1,这点大家可以直接记住,如果想要探究原理,也可以去了解尼克彻斯定理。


接下来继续和大家分享一下做的习题(但是最后结果在测试时,只有部分数据能够符合条件,经过调试之后,目前暂时不知问题所在,明天会继续查找,然后和大家分享。今天就分享一下思路,把我自己写的代码给出来,大家也可以看看是哪里有问题。)

这道题的思路其实很简单,我们只需要将每个黑子的点都分别当做中心点,然后计算出中心点到其他点的距离,将最远的距离作为伞的半径,之所以这样是因为只有最远的距离试做半径,才能将所有黑子都覆盖掉。接下来就可以求出种情况的伞的面积,进行比较输出最小的面积,则是题目要求的答案。

以下是代码实现:

#include<stdio.h>
#include<math.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int x[1000];
	int y[1000];
	double dis;
	double max = 0;
	double s[1000];
	int m = 0;
	double min;
	for (int i = 0; i < n; i++)
	{
		scanf("%d%d", &x[i], &y[i]);
	}
	for (int i = 0; i < n; i++)//每次都将其中一个点看做中心
	{
		for (int j = 0; j < n; j++)//求出该点分别到所有点的距离
		{
			dis = sqrt((x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) *( y[i] - y[j]));
			if (dis > max)
				max = dis;
			
		}
		s[m++] = max * max * 3.1415926535;
	}
	 min = s[0];
	for (int i = 1; i < m; i++)
	{
		if (s[i] < min)
			min = s[i];
	}
	printf("%.4lf", min);
	return 0;
}

这个代码在使用题目的样例时,能够正确输出,但是在平台的测试点运行错误。也分享和记录一下错误的其中一个例子,方便查找问题。(以下是非ac的输入与输出,我写的代码在这个数据的对应输出上运行错误,答案不为右下图的值)

感谢您的阅读,欢迎提出建议和指导

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值