解题思路
这是一个数学问题,可以通过分析网格的特性得到简单的数学公式。
关键点:
- 当宽度或高度是4的倍数时,可以完美平铺
- 其他情况下需要额外考虑边界
- 最终结果与面积有关
算法步骤:
- 判断宽度或高度是否为4的倍数
- 根据不同情况使用对应的公式计算
代码
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int cakeNum(int W, int H) {
if (W % 4 == 0 || H % 4 == 0) {
return W * H / 2;
} else {
return W * H / 2 + 1;
}
}
};
int main() {
int W, H;
cin >> W >> H;
Solution solution;
cout << solution.cakeNum(W, H) << endl;
return 0;
}
import java.util.*;
public class Main {
static class Solution {
public int cakeNum(int W, int H) {
if (W % 4 == 0 || H % 4 == 0) {
return W * H / 2;
} else {
return W * H / 2 + 1;
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int W = sc.nextInt();
int H = sc.nextInt();
Solution solution = new Solution();
System.out.println(solution.cakeNum(W, H));
sc.close();
}
}
class Solution:
def cake_num(self, W: int, H: int) -> int:
if W % 4 == 0 or H % 4 == 0:
return W * H // 2
else:
return W * H // 2 + 1
# 读取输入
W, H = map(int, input().split())
solution = Solution()
print(solution.cake_num(W, H))
算法及复杂度
- 算法:数学公式
- 时间复杂度:
- 空间复杂度: