使用C语言编写程序解决以下问题:银行系中有很多恒星,H 君晚上无聊,便爬上房顶数星星,H 君将整个银河系看做一个平面,左上角为原点(坐标为(1, 1))。现在有 n 颗星星,他给每颗星星都标上坐标(xi,yi)。表示这颗星星在第 x 行,第 y 列。现在, H 君想问你 m 个问题,给你两个点的坐标(x1,y1)(x2,y2),表示一个矩形的左上角的点坐标和右下角的点坐标。请问在这个矩形内有多少颗星星(边界上的点也算是矩形内)。 * 输入: 第一行输入一个数字n(1≤n≤100000),表示星星的颗数。 接下来的n行,每行输入两个数xi和yi(1≤xi,yi≤1000),表示星星的位置。 然后输入一个数字m(1≤m≤100000), 表示 H 君询问问题的个数。 接下来m行,每行输入四个数字x1,y1,x2,y2(1≤x1<x2≤1000), (1≤y1<2≤1000) 题目保证两颗星星不会存在于同一个位置。 * 输出: 输出一共包含m行,每行表示与之对应的每个问题的答案。写出完整程序代码并给出代码思路
时间: 2024-02-05 10:12:13 浏览: 57
以下是使用 C 语言编写程序解决这个问题的代码,思路是将每个星星的坐标存储在一个二维数组中,然后对于每个询问,遍历矩形内的所有点,统计落在星星坐标上的点的数量。
```c
#include <stdio.h>
int main() {
int n, m;
scanf("%d", &n);
// 创建一个二维数组存储每个星星的坐标
int star[n][2];
for (int i = 0; i < n; i++) {
scanf("%d %d", &star[i][0], &star[i][1]);
}
scanf("%d", &m);
for (int i = 0; i < m; i++) {
int x1, y1, x2, y2;
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
int count = 0;
// 遍历矩形内的每个点,统计落在星星坐标上的点的数量
for (int j = 0; j < n; j++) {
if (star[j][0] >= x1 && star[j][0] <= x2 && star[j][1] >= y1 && star[j][1] <= y2) {
count++;
}
}
printf("%d\n", count);
}
return 0;
}
```
代码思路:
1. 首先读入星星的数量 n,并创建一个二维数组 star 存储每个星星的坐标。
2. 遍历输入的 n 行,将每个星星的坐标存储在 star 数组中。
3. 读入问题的数量 m,并对于每个问题,读入左上角和右下角的坐标 x1, y1, x2, y2。
4. 创建一个计数器 count,遍历所有的星星坐标,如果星星的坐标在矩形内,则计数器加一。
5. 输出计数器 count 的值,表示在矩形内的星星数量。
6. 重复步骤 4 和 5 直到所有问题都被处理完毕。
阅读全文