NEUQ OJ 1499 橙子姐姐的围棋

题目描述:

  橙子姐姐是东秦有名的围棋高手当他打败东秦所有围棋高手后,独自对着棋盘发呆。他发现,他下的奇葩围棋棋盘由m*n1<m,n<10000)个点组成了若干个正方形(每个小格子都是1个正方形),现在橙子姐想知道这个棋盘中有多少个正方形。图为19*19的棋盘


输入:

第一行输入t(1<=t<=15)表示有t组输入数据,接下来的t行每组占1行每行2个数mn

输出:

每组输出数据占一行,每行输出一个数代表正方形个数。

样例输入
3
19 19
233 666
1000 1000
样例输出
2109
15892464
332833500

思路:每行格数为m,每列个数为n,边长为a(即组成正方形每边的格子数),以横、纵都为5个格组成的棋盘为例;

(1)对于行,a为1时每行有5种组成,a为2时每行有4种组成,a为3时每行为3个,以此类推可以得出每行的个数符合(m-a+1)的规律;

(2)同理可得,每列的个数符合(n-a+1)的规律;

(3)每行有(m-a+1)个,一共有(n-a+1)行,即用行的个数乘以列的个数得出的即为边长为a时有多少个正方形;

(4)a从1开始,到5结束(提示:当m与n不相等时,为组成正方形,a最大只能等于m,n中较小的数),将a等于不同值时的结果相加,最终结果即为共有的正方形数。

注意:从题中可以得知,19*19的棋盘行、列均由18个格组成,因此,输入的m与n需要减1后再进行计算。

#include<stdio.h>
int main()
{
	int m,n,i,a,j,x;
	long int s;
	scanf("%d",&x);
	for(i=0;i<x;i++)
	{
		s=0;a=1;
		scanf("%d %d",&m,&n);
		m=m-1;
		n=n-1;
		while(a<=m&&a<=n)
		{
			s+=(n-a+1)*(m-a+1);
			a++;
		}
		printf("%ld\n",s);
	}
	return 0;
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值