给你一个二维数组 nums ,其中 nums[i]=[li,wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。 如果存在 k 同时满足 k≤li 和 k≤wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [5,7] 可以切成边长最大为 5 的正方形。 设 maxLen 为可以从矩形数组 nums 切分得到的最大正方形的边长。 请你计算有多少个矩形能够切出边长为 maxLen 的正方形,并返回矩形数目 。编写一个c++程序
时间: 2023-06-25 18:08:11 浏览: 287
以下是一个基于暴力枚举的C++程序实现:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, maxLen = 0, cnt = 0;
cin >> n;
vector<vector<int>> nums(n, vector<int>(2));
for (int i = 0; i < n; i++) {
cin >> nums[i][0] >> nums[i][1];
maxLen = max(maxLen, min(nums[i][0], nums[i][1])); // 更新最大正方形边长
}
for (int i = 0; i < n; i++) {
if (nums[i][0] >= maxLen && nums[i][1] >= maxLen) cnt++; // 判断是否能切出最大正方形
}
cout << cnt << endl;
return 0;
}
```
程序首先读入矩形数量n和每个矩形的长度li和宽度wi,然后扫描所有矩形,更新最大正方形边长maxLen为所有矩形长度和宽度的最小值。最后再次扫描所有矩形,判断是否能够从该矩形切出边长为maxLen的正方形,统计满足条件的矩形数量cnt,并输出。
相关问题
用c++代码实现下面题目:给你一个二维数组 nums ,其中 nums[i]=[li,wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。 如果存在 k 同时满足 k≤li 和 k≤wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [5,7] 可以切成边长最大为 5 的正方形。 设 maxLen 为可以从矩形数组 nums 切分得到的最大正方形的边长。 请你计算有多少个矩形能够切出边长为 maxLen 的正方形,并返回矩形数目 。
以下是用 C++ 实现的代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
int countMaxSquare(vector<vector<int>>& nums) {
int n = nums.size();
int maxLen = 0;
for (int i = 0; i < n; i++) {
maxLen = max(maxLen, min(nums[i][0], nums[i][1]));
}
int count = 0;
for (int i = 0; i < n; i++) {
if (nums[i][0] >= maxLen && nums[i][1] >= maxLen) {
count++;
}
}
return count;
}
int main() {
vector<vector<int>> nums = {{5, 7}, {3, 4}, {10, 12}, {2, 2}, {8, 9}};
int count = countMaxSquare(nums);
cout << count << endl; // 输出结果为 3
return 0;
}
```
代码思路:
首先遍历给定的二维数组,找到能够切成正方形的最大边长 maxLen。
然后再次遍历二维数组,统计能够切出边长为 maxLen 的正方形的矩形数目。
题目描述 给你一个二维数组 nums ,其中 nums[i]=[li,wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。 如果存在 k 同时满足 k≤li 和 k≤wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [5,7] 可以切成边长最大为 5 的正方形。 设 maxLen 为可以从矩形数组 nums 切分得到的最大正方形的边长。 请你计算有多少个矩形能够切出边长为 maxLen 的正方形,并返回矩形数目 。 输入输出格式 输入格式 一行二维整型数组。 输出格式 一行整数。用C++代码实现
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<vector<int>> nums;
int l, w;
while (cin >> l >> w) {
nums.push_back({l, w});
}
int maxLen = 0;
for (auto& num : nums) {
maxLen = max(maxLen, min(num[0], num[1]));
}
int res = 0;
for (auto& num : nums) {
if (min(num[0], num[1]) >= maxLen) {
res++;
}
}
cout << res << endl;
return 0;
}
```
阅读全文