附上代码:
#include <stdlib.h> int g_areas[4][2] = {{1,3}, {5,6}, {8,9}, {10,11}}; int g_row = 4; int g_num = 5; int Match(int m) { int dis = m; int curloc = 1; int sum = 0; for (int i = 0; i < g_row; i++) { curloc = fmax(curloc, g_areas[i][0]); for (int loc = curloc; loc <= g_areas[i][1]; loc += dis) { sum++; curloc = loc; } } if (sum >= g_num) { return 1; } return 0; } int main() { int l = 1; int r = 10 / 4 + 1; while (l < r) { int m = l + (r - l) / 2; if (Match(m) == 1) { l = m + 1; } else { r = m; } } if (l != 1) { return l - 1; } return -1; }