上善若水

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  2 Posts :: 32 Stories :: 2 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

最新随笔

搜索

  •  

积分与排名

  • 积分 - 10189
  • 排名 - 1164

最新评论

阅读排行榜

评论排行榜

正方形与矩形

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:157            测试通过:82

描述

设有一个n*m方格的棋盘(1≤m,n≤100)。求出该棋盘中包含多少个正方形、多少个长方形(不包括正方形)。
例如:当n=2,m=3时,正方形的个数有8个,即边长为1的有6个,边长为2的有2个。矩形的个数有10个,即2*1的长方形有4个,1*2的长方形有3个,3*1的长方形有2个,3*2的长方形有1个。

输入

题目包含多组输入,输入包括两个整数,n和m。n,m=0时输入结束。

输出

正方形的个数和矩形的个数

样例输入

2 3
0 0

样例输出

8 10

题目来源

NUAA

分析:乍一看没有什么思路但仔细分析就可以看出门路来了。总共有矩形是m+1个边取2乘以n+1个边取2得来的,其中正方形的通项公式是An=n^2+n*d(d 是n与m的差,n较小),得到S=n(n+1)(2n+1)/6+n(n+1)d/2 得到最终结果。
总体说来这个题比较简单,如何使代码更少就是解题的关键了,AC了。
#include <stdio.h>
#define a m*(m+1)
int main()
{
    
int n,m,d,c;
    
while (scanf("%d%d",&n,&m),n!=0||m!=0)
    {
        
if (n<m)
        {
            d
=m;
            m
=n;
            n
=d;
        }
        d
=n-m;
        c
=a*(2*m+1)/6+a*d/2;
        printf(
"%d %d\n",c,a*n*(n+1)/4-c);
    }
}

注:c为正方形的个数。开始有个比大小的过程。
posted on 2009-12-05 00:27 上善若水 阅读(258) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理