整点(枚举)
Hello!大家好!我是@学霸小羊,今天分享一道c++枚举题:
题目描述
在二维坐标系, 有一个圆,圆心在(0,0),圆的半径是r。问圆内有多少个整点(所谓的整点就是横坐标和纵坐标都是整数的点)。
若点P的横坐标是整数a,纵坐标是整数b,那么只要满足aa + bb <= r*r, 那么P就是圆内的整点。
输入格式
多组测试数据。 第一行,一个整数G,表示有G组测试数据。1 <= G <= 10。
每组测试数据格式:
一个整数r。 1<=r<=100。
输出格式
共G行,每行一个整数。
样例
输入数据 1
5
1
2
3
47
96
输出数据 1
4
12
28
6920
28916
AC代码
#include<bits/stdc++.h>
using namespace std;
int g,r,ans;
int main()
{
cin>>g;
while(g--)//n组测试数据
{
ans=0;
cin>>r;
for(int i=-r;i<=r;i++)//枚举横坐标
{
for(int j=-r;j<=r;j++)//枚举纵坐标
{
if(i*i+j*j<=r*r)ans++;//判断是否符合要求
//题目中给出了条件:“若点P的横坐标是整数a,纵坐标是整数b,那么只要满足aa + bb <= r*r, 那么P就是圆内的整点。”
}
}
cout<<ans-1<<endl;
}
return 0;
}
这题其实很简单,利用题目中给出的条件,再枚举a,b。
这题的关键在于a,b的范围,并不是0~r,而是-r~r!
你学废了吗?