校赛Round2 1008 低能数学题

本文介绍了解决一道涉及椭圆与直线相交问题的方法。通过设定直线斜率和椭圆方程联立得到关于x的二次方程,进而求解线段PC与AB长度比值为p时的直线斜率k。文章提供了完整的解析过程和C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem Description

如图,在平面直角坐标系xOy中,已知椭圆C: 以及它的左准线l:x=-2,过椭圆右焦点F的直线交椭圆于A、B两点,线段AB的垂直平分线分别交直线l和AB于点P、C,若PC=pAB,求直线AB的斜率k。

Input

输入有多组数据(约100组)。每组数据一行一个实数p,表示线段PC与AB长度的比值p(p>=2)

Output

对于每组数据,输出一行一个实数k,表示直线AB的斜率,如果有多组解,请输出最小的一个正数解(保留3位小数)

Sample Input

2
2.5
100

Sample Output

1.000
0.378
0.007


分析:
没想到时隔一年多又遇到了解几题!还是在这种情况下遇到的! <( ̄ˇ ̄)/
最后半个小时就是在做这道题,可惜没做出来~,太弱了╮(╯▽╰)╭
直接设AB直线斜率k,和椭圆方程联立消去y可得x的二次方程:
设A(x1,y1),B(x2,y2),则

PC是AB的垂直平分线,且P点的横坐标上-2,C是AB中点;可得P,C点坐标:

进而可得PC,AB的长度:

带入PC=p*AB并化简可得:

利用求根公式可解得:

难点就是计算准确性!
现场做的时候只做到求出PC,AB长度这一步,下面就不敢写了.....,其实要是有信心写下去用求根公式一下子就写出来了,╮(╯▽╰)╭
#include <stdio.h>
#include <math.h>
int main()
{
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
	double m, n, t, p, k, k1, k2;
	while (~scanf("%lf", &p))
	{
		n = p*p - 3;
		m = p*sqrt(p*p - 4);
		t = 9 - 2*p*p;
		k1 = (n + m) / t;
		k2 = (n - m) / t;
		if (k1 > 0 && k2 > 0)
		{//需要加一个简单的判断,因为题目要求输出最小正数解
			k = k1 < k2 ? k1 : k2;
		}
		else
		{
			k = k1 > 0 ? k1 : k2;
		}
		printf("%.3lf\n", sqrt(k));
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值