1011: Counting Pixels

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40695895/article/details/89464208

原题链接

#include<iostream>

using namespace std;


/*
解题思路:
统计四分之一个圆的像素点数即可,从边缘向内检测像素点是否在圆的边界上,在的话y1-1,否则x1+1继续检测,直到x1=x(这里统计左上四分之一圆)
注意要使用long long int
*/

int main() {
    int x, y, r;
    long long int* results = new long long int[10000];
    int count = 0;

    while (true) {
        cin >> x >> y >> r;
        if (x == y && y == r && r == 0) {
            break;
        }

        int x1 = x - r + 1;
        int y1 = y;
        long long int sum = 0;
        while (x1 <= x && y1 < y+r){
            if ((x1 - x)*(x1 - x) + (y1 - y)*(y1 - y) - r*r < 0) {
                sum += x - x1 + 1;
                y1++;
            }
            else{
                x1++;
            }
        }
        results[count] = 4 * sum;
        count++;
    }

    for (int i = 0; i < count; i++) {
        cout << results[i] << endl;
    }
    delete[] results;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40695895/article/details/89464208
今日推荐