当然可以!以下是使用 C 语言编写的解决方案:#include <stdio.h>#include <stdlib.h>typedef struct { int left, top, width, height;} Rectangle;int compareByLeft(const void* a, const void* b) { Rectangle* rectA = (Rectangle*)a; Rectangle* rectB = (Rectangle*)b; return rectA->left - rectB->left;}int main() { int R; scanf("%d", &R); int N; scanf("%d", &N); Rectangle* rectangles = (Rectangle*)malloc(N * sizeof(Rectangle)); for (int i = 0; i < N; i++) { scanf("%d%d%d%d", &rectangles[i].left, &rectangles[i].top, &rectangles[i].width, &rectangles[i].height); } qsort(rectangles, N, sizeof(Rectangle), compareByLeft); int totalArea = R * R; int leftArea = 0; int rightArea = 0; int minX = R; for (int i = 0; i < N; i++) { leftArea += rectangles[i].width * rectangles[i].height; rightArea = totalArea - leftArea; int diff = abs(leftArea - rightArea); if (diff <= minX) { minX = diff; } else { break; } } printf("%d\n", minX); free(rectangles); return 0;}
这段代码与前面所提供的 C++ 解决方案相似。我们使用了结构体 Rectangle 来表示每个小矩形,定义了 compareByLeft 函数来进行按照左边界排序,并使用 qsort 函数对小矩形数组进行排序。
接下来的逻辑与之前相同,计算左边和右边的面积,并更新最小差值 minX。
最后,我们使用 printf 函数输出结果。
请注意,这段代码需要在 C 语言环境中运行。如果您有任何问题,请随时向我提问! |