PAT乙级1068. 万绿丛中一点红(C语言)

PAT乙级真题题解目录


/*
 * 1. 一定程度上考察对C语言的掌握
 * 2. 确定独一无二颜色的像素点
 *  2.1 颜色是一个 24 位的数值 —— 以像素数值为下标构造数组,通过计数判断独一无二
 *  2.2 即数组下标最大值 < 2^{25},大数组要定义在main函数外,防止栈溢出
 * 3. 独一无二颜色的像素点,与其周围 8 个相邻像素的颜色差需要 > TOL
 *  3.1 边界的像素周围不足8个相邻元素 —— 给边界像素外围再包一圈颜色为0的像素,将特殊情况一般化,统一判断
 *  3.2 像素点最多1000*1000个,外围包一圈则为1002*1002个
 *  3.3 周围颜色值存在更大或更小的情况,需要借助 abs() 函数,获取绝对值
 * 4. 输出要求的像素点的位置,x为列,y为行
 */
#include 
#include 

#define LEN 1002

int isUnique(int arr[][LEN], int x, int y, int TOL) {
    if (abs(arr[y][x] - arr[y-1][x-1]) <= TOL //左上 
        || abs(arr[y][x] - arr[y][x-1]) <= TOL //左
        || abs(arr[y][x] - arr[y+1][x-1]) <= TOL //左下 
        || abs(arr[y][x] - arr[y-1][x]) <= TOL //上
        || abs(arr[y][x] - arr[y-1][x+1]) <= TOL //右上 
        || abs(arr[y][x] - arr[y][x+1]) <= TOL //右 
        || abs(arr[y][x] - arr[y+1][x+1]) <= TOL //右下 
        || abs(arr[y][x] - arr[y+1][x]) <= TOL) { //下
        return 0;
    }
    return 1;
} 
int arr[LEN][LEN] = {0};// 每个像素的颜色, 独一无二像素点的数量 
int pixel[2 << 24] = {0};// 2 << 24 即 2^25次方,能包括任意24位像素点
int main() {
    int M, N, TOL, cnt = 0;//图像的分辨率(列,行); 像素点与相邻点的颜色差阈值 
    scanf("%d %d %d", &M, &N, &TOL);
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= M; j++) {
            scanf("%d", &arr[i][j]);
            pixel[arr[i][j]]++;//统计该像素点的数量 
        }
    }
    int x, y, color;//列、行,颜色值 
    for (int i = 1; i <= N; i++) {
        for (int j = 1; j <= M; j++) {
            if (pixel[arr[i][j]] == 1) {//该像素点只有一个 
                if (isUnique(arr, j, i, TOL)) {
                    cnt++;
                    x = j;
                    y = i;
                    color = arr[i][j];
                    if (cnt == 2) {
                        break;
                    }
                }
            }
        }
        if (cnt == 2) {
            break;
        }
    }
    if (cnt == 2) {
        printf("Not Unique\n");
    } else if (cnt == 0) {
        printf("Not Exist\n");
    } else {
        printf("(%d, %d): %d", x, y, color);
    }
    return 0;
}

你可能感兴趣的:(PAT乙级真题)