面试算法编程题

news/2025/2/16 5:18:31/

面试算法编程题记录

题目 : 羊圈里的狼
题目背景 :
一到了晚上,草原牧民的羊就会被赶进羊圈里。这时,野外的狼群就会打羊羔的主意。为了保护羊羔,牧民需要将羊圈里的狼赶走或杀死。由于来的狼很多,他需要快速甄别哪些狼在羊圈里面,哪些狼在羊圈外面。请写一个程序帮助他。
描述 :
羊圈由n 个连续点组成{ Pi }, 1 <= i <= n; 3 <= n <= 100.其中, P1与Pn首尾相连,形成一个闭合的羊圈。假设狼的位置为(x, y),且保证该点不在墙上,需要判断其在圈里还是圈外。
输入格式
输入第一行,一个正整数 n(3 <= n <= 100)表示圈坐标点的个数。接下来输入n行,每行两个浮点数代表羊圈的坐标点 Pi;
输入多行数据,每行数据两个浮点数(x, y),表示该条狼的位置。
输出格式 :
输出多行数据,每行数据为一个字符串,表示该条狼是否在羊圈里。如果在里面输出True,否则输出 False。


#include <iostream>
#include <vector>struct Point {double x;double y;
};
bool isInsideCircle(const std::vector<Point>& circle, const Point& wolf) {int crossCount = 0;for (int i = 0; i < circle.size(); ++i) {const Point& p1 = circle[i];//先后两个点const Point& p2 = circle[(i + 1) % circle.size()];if ((p1.y > wolf.y) != (p2.y > wolf.y) &&wolf.x < (p2.x - p1.x) * (wolf.y - p1.y) / (p2.y - p1.y) + p1.x) {++crossCount;}}return crossCount % 2 == 1;
}
int main() {int n;std::cin >> n;std::vector<Point> circle(n);for (int i = 0; i < n; ++i) {std::cin >> circle[i].x >> circle[i].y;}int m;std::cin >> m;for (int i = 0; i < m; ++i) {Point wolf;std::cin >> wolf.x >> wolf.y;std::cout << (isInsideCircle(circle, wolf) ? "True" : "False") << std::endl;}return 0;
}

http://www.ppmy.cn/news/1044803.html

相关文章

除自身以外数组的乘积(c语言详解)

题目&#xff1a;除自身外数组的乘积 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请不要使用除…

mekefile 编写

mekefile 编写 参考 Linux下使用 autoconf和automake 自动构建 项目 make file文件 makefile 中加入shell语句 if shell 参考 foo.bak: foo.barecho "foo"if [ -d "~/Dropbox" ]; then echo "Dir exists"; fi Or foo.bak: foo.barecho &quo…

运营知识之用户运营(一)触达用户的几种方式

运营知识之用户运营&#xff08;一&#xff09;触达用户的几种方式 APP推送短信&#xff08;DeepLink/Deferred DeepLink&#xff09;&#xff1a;短信拉起app电子邮件 EDM电话/外呼&#xff08;人工、AI&#xff09;电话外呼加短信&#xff08;操作步骤短链&#xff09;微信生…

matlab使用教程(19)—曲线拟合与一元方程求根

1.多项式曲线拟合 此示例说明如何使用 polyfit 函数将多项式曲线与一组数据点拟合。您可以按照以下语法&#xff0c;使用 polyfit 求出以最小二乘方式与一组数据拟合的多项式的系数 p polyfit(x,y,n), 其中&#xff1a; • x 和 y 是包含数据点的 x 和 y 坐标的向量 …

FPGA:uart原理+tx发送模块+rx接收模块

文章目录 一、串口通信二、UART通信三、tx发送模块四、rx模块接收 一、串口通信 处理器与外部设备通信的两种方式&#xff1a; 串行通信&#xff1a; 指数据的各个位使用多条数据线同时进行传输。 并行通信&#xff1a; 将数据分成一位一位的形式在一条数据线上逐个传输。 串…

小航助学GESP_C++一级模拟测试卷第3套(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…

一百六十一、Kettle——Linux上安装的kettle9.2开启carte服务(亲测、附流程截图)

一、目的 在Linux上安装好kettle9.2并且连接好各个数据库后&#xff0c;下面开启carte服务 二、实施步骤 &#xff08;一&#xff09;carte服务文件路径 kettle的Linux运行的carte服务文件是carte.sh &#xff08;二&#xff09;修改kettle安装路径下的pwd文件夹里的服务器…

echarts坐标轴刻度值使用科学计数法表示

最近使用echarts做图表&#xff0c;数字位数过多时&#xff0c;在小屏手机会出现数字显示不全&#xff0c;被遮挡的问题。 echarts: "5.4.0", vue: "3.2.45", 使用科学计数法 //y轴使用科学计数法表示 const echartsYaxisLabelFormatter (value: any) &g…