给出一个n*m的网格 输出有多少个正方形跟长方形c语言
时间: 2024-12-08 15:20:16 浏览: 30
C 代码 计算点网格 在 2D 正方形的内部.rar
在C语言中,计算一个给定大小的n * m网格中有多少个正方形或矩形,可以分为两部分考虑:一是正方形的数量,二是矩形的数量。对于正方形,边长可以从1到min(n, m)。
**计算正方形的数量:**
正方形有整数边长,所以对于每个边长i (1 <= i <= min(n, m)),都有n-i+1行和m-i+1列可以构成边长为i的正方形。因此,总正方形数 = Σ (n - i + 1) * (m - i + 1),从i=1遍历到i=min(n, m)。
**计算矩形的数量:**
矩形的长宽比不是固定的,所以我们需要遍历所有可能的组合。假设长为l,宽为w,那么l和w的最大值分别是n和m。矩形的数量就是所有可能的(l, w)对的数量,其中l <= w。这可以用动态规划的方式实现,比如使用两个嵌套循环。
以下是简化版的C代码片段:
```c
#include <stdio.h>
int count_squares(int n, int m) {
int sum = 0;
for (int i = 1; i <= min(n, m); ++i)
sum += (n - i + 1) * (m - i + 1);
return sum;
}
int count_rectangles(int n, int m) {
int count = 0;
for (int l = 1; l <= n; ++l) {
for (int w = l; w <= m; ++w)
count += (m - w + 1);
}
return count;
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
printf("正方形的数量: %d\n", count_squares(n, m));
printf("矩形的数量: %d\n", count_rectangles(n, m));
return 0;
}
```
阅读全文