uva 696 - How Many Knights

刺骨的言语ヽ痛彻心扉 2022-05-12 23:26 184阅读 0赞

题目链接:uva 696 - How Many Knights

题目大意:给出一个n * m的网格,计算最多可以放置几个国际象棋中的骑士。

解题思路:分成三类来讨论:

1)min(n, m) == 1, 也就是无论怎么摆也不会影响到其他的骑士。

2)min(n, m) == 2, 这是将网格将网格分成2*4的若干部分,每个部分的前半部分放置骑士,主要注意模4后剩余部分的处理。

3)n *m的网格上间隔摆放(就是对应的黑格子或者白格子)(n * m - 1)/ 2

  1. #include <stdio.h>
  2. int f(int n, int m) {
  3. if (n < m) return f(m, n);
  4. else if (m == 1) return n;
  5. else if (m == 2) {
  6. return (n / 4) * 4 + ((n % 4 > 1) ? 2 : n % 4) * 2;
  7. }
  8. else return (n * m + 1) / 2;
  9. }
  10. int main () {
  11. int r, c;
  12. while (scanf("%d%d", &r, &c), r + c) {
  13. printf("%d knights may be placed on a %d row %d column board.\n", f(r, c), r, c);
  14. }
  15. return 0;
  16. }

发表评论

表情:
评论列表 (有 0 条评论,184人围观)

还没有评论,来说两句吧...

相关阅读

    相关 How Many Tables

    Problem Description: 今天是伊格内修斯的生日。他邀请了很多朋友。现在是晚餐时间。伊格内修斯想知道他至少需要多少张桌子。你必须注意,并非所有的朋友都彼此认识