方形问题(数方形)

/*
【基础】:方形问题(easy)

Time Limit:1000MS  Memory Limit:65536K
Total Submit:388 Accepted:180 

Description 

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


Input 

(a.in):N,M

Output 

(a.out):正方形的个数与长方形的个数

Sample Input 


2 3

Sample Output 


8 10

*/

/*
解题思路:
根据数方格时的重叠性去做,而不是整除边,因为数的时候不是独立的
比如:
1x3的方格:
1 2 3 4

在数的过程中:应该为:1 2 3 , 2 3 4, 显然:2已重叠
并且度是1,即间距为1: 所以直接计算,然后相乘:
k2 = m-i+1 ; k1 为在横向所能扩展出的边的个数
k1 = n-i+1 ; k2 为在纵向所能扩展出的边的个数
相乘即为总个数;

*/

#include 
< stdio.h >

int  main( void )
{
    
long  xx = 0 ,xy = 0  ;
    
int  i,j,k1,k2,d,n,m ;
    
    scanf(
" %d %d " , & n, & m);
    
    
for (i = 1  ; i <=  n;  i ++ /* 枚举各种方形 */
    
for (j = 1  ; j <=  m;  j ++ )
    {
             k1
=  n - i + 1 ;
             k2
=  m - j + 1 ;
            
if  ( i  ==  j)
            {
                
                 xx 
+=  k1 * k2;
            }
            
else
            {
                 xy 
+=  k1 * k2;
            }
    }
    
    printf(
" xx=%ld,yy=%ld " ,xx,xy);
   
    
return   0  ;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值