luogu-B3698 [语言月赛202301] 一次函数

luogu-B3698 [语言月赛202301] 一次函数

GESP二级练习,多层循环和分支练习,难度★★☆☆☆。

luogu-B3698 [语言月赛202301] 一次函数

题目要求

题目描述

在二维平面坐标系 xOyxOy 中,一个点的位置可以由横坐标 xx 和纵坐标 yy 两个参数描述,其坐标记为 (x,y)(x,y)

一次函数 y=kx+by=kx+b 是满足纵坐标 yy 等于 kk 乘以横坐标 xxbb 的点的集合,即满足该条件的点都在该一次函数的直线上。

现在有 nn 个点,第 ii 个点的坐标为 (xi,yi)(x_i,y_i)

现在请你求出,分别有多少点,在给定的一次函数图像上。

形式化地,给出 nn 对整数 (x,y)(x,y),请你求出有多少对数满足 y=k×x+by=k\times x+b

输入格式

输入共 n+1n+1 行。

输入的第一行为三个整数 n,k,bn,k,b

接下来 nn 行,每行两个数 xi,yix_i,y_i,代表第 ii 个点的坐标。

输出格式

输出一行一个整数,代表有多少点在给出的一次函数上(即满足 yi=kxi+by_i = kx_i+b)。

输入 #1

5 3 0
0 0
1 3
2 7
3 9
-1 -4

输出 #1

3

说明/提示

样例 1 解释

给出的一次函数为 y=3xy=3x

(0,0)(0,0)(1,3)(1,3)(3,9)(3,9) 在一次函数上,共 33 个。

数据点性质

对于 30%30\% 的测试点,n=1n=1; 对于 100%100\% 的测试点,1n1061 \le n \le 10^60k,b1050 \le |k|,|b| \le 10^50xi,yi1090 \le |x_i|,|y_i| \le 10^9


题目分析

解题思路

  1. 首先,我们需要理解题目的核心要求:

    • 给定n个点的坐标(x,y)和一个一次函数y=kx+b
    • 需要判断有多少个点在这条直线上
    • 即满足y=kx+b的点的数量
  2. 解题思路:

    • 对于每个输入的点(x,y),我们只需要判断是否满足y=kx+b这个等式
    • 将x代入方程得到的y值与点的实际y值进行比较
    • 如果相等,说明点在直线上
  3. 具体实现:

    • 读入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 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on