矩形A + B
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4652 Accepted Submission(s): 3601
Problem Description
给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格.
![](https://i-blog.csdnimg.cn/blog_migrate/30eb0263b48b7de077ccf5a73574b88d.jpeg)
Input
第一行输入一个t, 表示有t组数据,然后每行输入n,m,分别表示网格的高和宽 ( n < 100 , m < 100).
Output
每行输出网格中有多少个矩形.
Sample Input
2 1 2 2 4
Sample Output
3 30
Source
Recommend
刚开始看个这题目的时候,我也感到不知道从哪里下手。
但是这种题目就是要找规律,发现一些特点,总结它们!
感谢No.1提供的思路!
有n行和m列。
如果只看一行的话,它有多少个矩形呢?单个地数有m个,两个地数有m-1个……,m个地数有1个。每一行就有:1+2+3+……+m个=(1+m)*m/2。我们把每一行抽象成一个矩形,也就只剩一列了。一列的话,有:1+2+……+n=(1+n)*n/2个。
总结起来,就有:=(1+m)*m/2*(1+n)*n/2那么多个了。
如果只看一行的话,它有多少个矩形呢?单个地数有m个,两个地数有m-1个……,m个地数有1个。每一行就有:1+2+3+……+m个=(1+m)*m/2。我们把每一行抽象成一个矩形,也就只剩一列了。一列的话,有:1+2+……+n=(1+n)*n/2个。
总结起来,就有:=(1+m)*m/2*(1+n)*n/2那么多个了。
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int t = input.nextInt();
for (int i = 0; i < t; i++)
{
int n = input.nextInt();
int m = input.nextInt();
int Line = (1 + m) * m / 2;
int List = (1 + n) * n / 2;
System.out.println(Line * List);
}
}
}