给你n,让你求2n*2n的半径为2n-1的圆里面有多少个格子还有多少个格子被圆的线盖着。 开始以为有公式,结果自己画图来看,园内格子数不符合公式T T 。。不过最多就150,套两层循环求格子数就好了。 #include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <limits.h> #include <string.h> #include <string> #include <algorithm> using namespace std; double dis(int a,int b) { return sqrt(a*a + b*b); } int main() { int n; bool flag = false; while( ~scanf("%d",&n) ) { if( flag ) printf("/n"); flag = true; int x = (n-1)*8 + 4; int y = 0;; double r = (2*n - 1)/2.0; for(int i=-n; i<n; i++) for(int k=-n; k<n; k++) if( dis(i,k) <= r && dis(i,k+1) <= r && dis(i+1,k) <= r && dis(i+1,k+1) <= r ) y++; printf("In the case n = %d, %d cells contain segments of the circle./n",n,x); printf("There are %d cells completely contained in the circle./n",y); } return 0; }