luogu-B3698 [语言月赛202301] 一次函数
GESP二级练习,多层循环和分支练习,难度★★☆☆☆。
luogu-B3698 [语言月赛202301] 一次函数
题目要求
题目描述
在二维平面坐标系 中,一个点的位置可以由横坐标 和纵坐标 两个参数描述,其坐标记为 。
一次函数 是满足纵坐标 等于 乘以横坐标 加 的点的集合,即满足该条件的点都在该一次函数的直线上。
现在有 个点,第 个点的坐标为 。
现在请你求出,分别有多少点,在给定的一次函数图像上。
形式化地,给出 对整数 ,请你求出有多少对数满足 。
输入格式
输入共 行。
输入的第一行为三个整数 。
接下来 行,每行两个数 ,代表第 个点的坐标。
输出格式
输出一行一个整数,代表有多少点在给出的一次函数上(即满足 )。
输入 #1
5 3 0
0 0
1 3
2 7
3 9
-1 -4
输出 #1
3
说明/提示
样例 1 解释
给出的一次函数为 。
点 ,, 在一次函数上,共 个。
数据点性质
对于 的测试点,; 对于 的测试点,,,。
题目分析
解题思路
首先,我们需要理解题目的核心要求:
- 给定n个点的坐标(x,y)和一个一次函数y=kx+b
- 需要判断有多少个点在这条直线上
- 即满足y=kx+b的点的数量
解题思路:
- 对于每个输入的点(x,y),我们只需要判断是否满足y=kx+b这个等式
- 将x代入方程得到的y值与点的实际y值进行比较
- 如果相等,说明点在直线上
具体实现:
- 读入n、k、b三个参数
- 循环读入n个点的坐标
- 对每个点,计算kx+b是否等于y
- 用计数器统计满足条件的点的数量
{% include custom/custom-post-content-inner.html %}
示例代码
#include <iostream>
using namespace std;
int main() {
// 声明变量n(点的个数)、k(斜率)、b(截距)
int n, k, b;
cin >> n >> k >> b;
// 声明变量x、y用于存储每个点的坐标
int x, y;
// ans用于统计在直线上的点的个数
int ans = 0;
// 循环读入n个点的坐标
for (int i = 1; i <= n; i++) {
cin >> x >> y;
// 判断点是否在直线y=kx+b上
if (y == k * x + b) {
// 如果在直线上,计数器加1
ans++;
}
}
// 输出在直线上的点的个数
cout << ans;
return 0;
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on