区域内点的个数

Problem Description

X晚上睡不着的时候不喜欢玩手机,也不喜欢打游戏,他喜欢数星星。
Input

多组输入。

每组先输入一个整数N(N <= 10000),接着输入两个点代表矩形的左下点B(x,y)和右上点T(x,y),然后输入N个(X,Y)代表N颗星星。问有多少颗星星在窗子内部,在窗边上的不计。
Output

输出一个整数,代表有多少颗星星在窗子内部。
Sample Input

3
0 1
3 4
1 1
2 2
3 3
2
1 1
5 5
4 4
0 6

Sample Output

1
1

#include<stdio.h>
int main()
{
    int a,b,c,d,x,y;//有个问题,一开始设定为double类型时往里输入一堆整数的时候,出不来正确答案??
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int sum=0;
        scanf("%d %d",&a,&b);
        scanf("%d %d",&c,&d);
        for(int i=0;i<n;i++)
        {
            scanf("%d %d",&x,&y);
            if(x>a&&x<c&&y>b&&y<d)
            {
                sum++;
            }
        }
        printf("%d\n",sum);
    }

    return 0;
}


//很简单的题目,但是在输入的int 和double 上出现问题了,,需要解答

### 计算给定区域内圆内随机数量的算法 对于计算或统计落在圆内的随机数量,一种有效方法是在包围该圆的一个正方形内部生成大量随机,并通过判断这些是否位于圆内来统计满足条件的数。这种方法基于蒙特卡罗模拟的思想。 具体来说,在一个边长为 \(2R\) 的正方形范围内生成大量的二维随机坐标 \((x,y)\),其中 \(R\) 是圆的半径。如果某个到圆心的距离小于等于 \(R\),则认为这个位于圆内;否则,它处于圆外。重复此过程多次后,可以通过比较落入圆内的的比例乘以总尝试次数得到近似的结果[^3]。 另外值得注意的是,理论上讲,当样本量足够大时,按照上述方式生成并筛选出来的数目应该接近于理论预期值——即由圆形与方形面积比例决定的概率所对应的数值。根据提供的资料,已知正方形面积为 \(4R^2\) 而圆面积为 \(\pi R^2\),所以理想情况下每四个随机产生的大约有一个会落在目标圆圈之内[^5]。 ```java import java.util.Random; public class RandomPointInCircle { private final double radius; private final double centerX; private final double centerY; public RandomPointInCircle(double radius, double x_center, double y_center){ this.radius = radius; this.centerX = x_center; this.centerY = y_center; } public int countPointsInside(int numberOfAttempts){ Random randomGenerator = new Random(); int pointsInsideCount = 0; for (int i = 0; i < numberOfAttempts ; ++i) { // Generate a point within the bounding square of side length 2*radius. double x = this.centerX + (randomGenerator.nextDouble() * 2 - 1) * this.radius; double y = this.centerY + (randomGenerator.nextDouble() * 2 - 1) * this.radius; // Check whether the generated point lies inside or on boundary of circle. if ((Math.pow(x-this.centerX, 2)+ Math.pow(y-this.centerY, 2))<= Math.pow(this.radius, 2)){ ++pointsInsideCount; } } return pointsInsideCount; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值