#include #include #include using namespace std; const int N=1e5+20; long long x[N],y[N],r[N]; long long a[20],b[20]; long long z[20],n; int main() { scanf('%lld',&n); for(int i=1;i<=n;i++) cin>>x[i]>>y[i]>>r[i]; for(int i=1;i<=10;i++) { cin>>a[i]>>b[i]; z[i]=1; } for(int i=1;i<=n;i++) { for(int j=1;j<=10;j++) if (( (a[j]-x[i])(a[j]-x[i]) + (b[j]-y[i])(b[j]-y[i]) )<r[i]*r[i]) { z[j]++; } } double ans=0; for(int i=1;i<=10;i++) ans+=z[i]; printf('%.2lf',ans/10.0); return 0; }

该代码用于计算圆形区域内点的数量。

代码中存在以下错误:

  1. 第 7 行应该是 scanf('%lld',&n);,因为 nlong long 类型。
  2. 第 18 行的循环条件应该是 j<=10,而不是 i<=10
  3. 第 19 行中的 i 应该改成 j,即 if (( (a[j]-x[i])*(a[j]-x[i]) + (b[j]-y[i])*(b[j]-y[i]) )<r[i]*r[i])
  4. 第 24 行应该是 printf('%.2lf',ans/10.0);,因为要输出小数。

修改后的代码如下:

#include #include #include using namespace std; const int N=1e5+20; long long x[N],y[N],r[N]; long long a[20],b[20]; long long z[20],n; int main() { scanf('%lld',&n); for(int i=1;i<=n;i++) cin>>x[i]>>y[i]>>r[i]; for(int i=1;i<=10;i++) { cin>>a[i]>>b[i]; z[i]=1; } for(int i=1;i<=n;i++) { for(int j=1;j<=10;j++) if (( (a[j]-x[i])(a[j]-x[i]) + (b[j]-y[i])(b[j]-y[i]) )<r[i]*r[i]) { z[j]++; } } double ans=0; for(int i=1;i<=10;i++) ans+=z[i]; printf('%.2lf',ans/10.0); return 0; }

代码解释:

  • scanf('%lld',&n);:使用 scanf 函数输入 long long 类型的 n
  • for(int j=1;j<=10;j++):循环遍历 10 个圆形区域。
  • if (( (a[j]-x[i])*(a[j]-x[i]) + (b[j]-y[i])*(b[j]-y[i]) )<r[i]*r[i]):判断点是否在圆形区域内。
  • z[j]++;:如果点在圆形区域内,则计数器 z[j] 加 1。
  • printf('%.2lf',ans/10.0);:输出圆形区域内点的数量,保留两位小数。
C++ 代码优化:计算圆形区域内点的数量

原文地址: https://www.cveoy.top/t/topic/jCZG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录