竞赛
考级
法西斯玫瑰
这个问题通过构造可以转换为一个等价的问题: 求m*n个格子的矩形中有多少不同的正方形。其中矩形和正方形都由单位格子构成。 我们首先可以知道最大的正方形边长为min(m,n),最小的正方形边长为1。 那么就可以通过数正方形的方式得到不同的正方形的总数。从最小的开始数,会发现边长为1的正方形有m*n个。 接着数边长为2的正方形。如果觉得不好数,可以数边长为2的正方形的中心点数量,会发现那些不在矩形边缘的交叉点均可以作为边长为2的正方形的中心(交叉点周围有四个块),因此得到不在边缘的交叉点的数量是(m-1)*(n-1),这就是边长为2的正方形的数量。 同理,我们可以通过数正方形的中心点(交叉点)或者中心块的方式得到边长为3的正方形的数量、边长为4的正方形的数量……等等,直到数到边长为min(m,n)的正方形的数量,接着把所有边长的正方形的数量相加,就得到了问题的答案。 从而得到公式:令a = min(m,n),方案数 S=∑i=1a(m−i+1)∗(n−i**** = \sum_{i=1}^{a} (m-i+1)*(n-i+1) S=i=1∑a (m−i+1)∗(n−i+1) 例如题目中4*6的矩形的可选方案数 = ∑i=14(4−i+1)∗(6−i+1)=4∗6+3∗5+2∗4+1∗3=50\sum_{i=1}^{4} (4-i+1)*(6-i+1) = 4*6+3*5+2*4+1*3 = 50 i=1∑4 (4−i+1)∗(6−i+1)=4∗6+3∗5+2∗4+1∗3=50 本题从数学角度得到解答。 参考代码如下:
RainbowsAc
题目描述 西虹市要新建一个广场,为了美观,要求完全是正方形。目前正在规划当中,正方形的大小和位置都在热烈的讨论之中。假设将可用于造广场的区域看成一个矩形,由 1×1 的单位正方形构成。如下图:这是一个 4∗6 的矩形区域。
揽星河
.Dream.
A2 数方格解法 我们能发现一个N×M的矩形内的所有正方形的个数为N×M+(N-1)×(M-1)+(N-2)+(M-2)...
φ
要求计算在一个 ( n \times m ) 的矩形区域中,可以构建的不同大小的正方形的数量。为了找到解,我会分步骤解释计算过程,并提供Python代码作为示例。 解题思路 1. 正方形的大小:一个正方形的边长范围从 1 到 ( \min(n, m) )。 2. 计算正方形数量:对于每个边长为 ( k ) 的正方形: * 可以在 ( n-k+1 ) 行中选择上边的位置。 * 可以在 ( m-k+1 ) 列中选择左边的位置。 * 因此,边长为 ( k ) 的正方形的数量为 ( (n-k+1) \times (m-k+1) )。 3. 总计所有可能的正方形:将所有边长从 1 到 ( \min(n, m) ) 的正方形数量相加。 PYTHON代码实现 以下是根据上述逻辑实现的 Python 代码: 输入输出示例 假设输入: 运行上述代码将输出: 解释 * 对于边长为 1 的正方形,可以有 ( (1-1+1) \times (5-1+1) = 1 \times 5 = 5 ) 种位置。 * 由于 ( n = 1 ) 小于 ( m ),没有更大的正方形可以构建,所以只有边长为 1 的正方形。 故,最后的输出结果是 5,表示可以构建 5 个不同的正方形方案。
俊俊老师
直接发代码好吧↓
LuoYu
#include<iostream> using namespace std; int main(){ long long n,m,sum=0; cin>>n>>m; if(n<=m){ for(int i=n,j=m;i>0;i--,j--){ sum+=ij; } }else{ for(int i=n,j=m;j>0;i--,j--){ sum+=ij; } } cout<<sum; return 0; }
.(714)
#include<iostream> using namespace std; int main(){ long long n,m; cin>>n>>m; long long sum=0; if(n<=m){ for(int i=n,j=m;i>0;i--,j--){ sum+=i*j; } } else{ for(int i=n,j=m;j>0;i--,j--){ sum+=i*j; } } cout<<sum; return 0; }
Mark--尹子航
#include<iostream> using namespace std; int main(){ long long n,m,sum=0; cin >> n >> m; if(n<=m){ for(int i=n,j=m;i>0;i--,j--){ sum += ij; } } else{ for(int i=n,j=m;j>0;i--,j--){ sum+=ij; } } cout<<sum; return 0; }
180****3299
正在减肥的吃货
#include<iostream> using namespace std; int main(){ long long n,m; cin>>n>>m; long long sum=0; if(n<=m){ for(int i=n,j=m;i>0;i--,j--){ sum+=i*j; } else{ for(int i=n,j=m;j>0;i--,j--){ sum+=i*j; } } cout<<sum; return 0; }
章静远
春易老
复仇者_THUNDER
找找规律,这题不是很难 #include<iostream> using namespace std; int main(){ int m,n,x=0; cin>>m>>n; for(m;m>=0;--m){ x=x+m*n; --n; if(n==0){ break; } } cout<<x; return 0; }
传说中的黄色闪光
勇敢的小霍皮
135****0149
胡雨轩
#include<stdio.h> using namespace std; int main(){ }
黄老师
栗子
共99条