前两天去百度面试,一面的面试官出了这么个问题,成功解决。
思路如下
选中网格中的一个点,坐标为(x,y),把这个点当做长方形的左上角定点,则此长方形的宽度变化范围是(1,n-x),高度变化范围是(1,y),对应的长方形个数是(n-x)*y,再减去高和宽相等的情况,即(n-x)*y - min(n-x,y)。
完整代码如下:
int main()
{
int n;
while (1)
{
cin >> n;
int res = 0;
if (n < 2)
cout << 0 << endl;
else
{
for (int x = 0; x < n; x++)
for (int y = 1; y <= n; y++)
{
int width = n - x;
int height = y;
res += width * height - min(width, height);
}
cout << res << endl;
}
}
return 0;
}