🏆今日学习目标: 🍀学会棋盘问题和题目 ✅创作者:贤鱼 🎉个人主页:贤鱼的个人主页 🔥专栏系列:c++
棋盘问题
题目
- 题目
- 思路
- 首先解决正方形: 边长为1 n*m 边长为2 (n-1)(m-1) 边长为3 (n-2)(m-2) ........ 所以正方形就出来了, z(储存正方形个数)=n*m;n--,m-- 下面来处理长方形 长1 有n个 长 2 有n-1个
- AC代码
- 公式法
- 暴力法
设有一个N×M方格的棋盘(1≤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个: 如上例:输入:2,3 输出:8,10 输入格式 N,MN,M 输出格式 正方形的个数与长方形的个数 输入输出样例 输入 #1复制 2 3 输出 #1复制 8 10
思路 首先解决正方形: 边长为1 nm 边长为2 (n-1)(m-1) 边长为3 (n-2)(m-2) … 所以正方形就出来了, z(储存正方形个数)=nm;n–,m– 下面来处理长方形 长1 有n个 长 2 有n-1个长n 有1个 长m同上 所以长n的矩形就为1+2+3+…n=(n+1)*n/2 m同上 所以矩形的个数为 (m+1)m(n+1)*n/2/2 最后减去前面的正方形就出来了
这个搞不懂没关系,还有方法 数据范围这么小???暴力直接做 i 0 - n j 0 - m k i+1 - n w j+1 - m 这样子当k-i等于w-j的时候,说明长宽相等(正方形),其余的不就是长方形?? i,j从0开始因为这样子就包括了边长为1的正方形和长方形
AC代码 公式法#include
#include
#include
#include
using namespace std;
int z=0,c=0;//分别储存正方形,长方形
int main(){
int n,m;
cin>>n>>m;
int f=0;
int nn=n,mm=m;//单独拿出来,不影响后面矩形的计算
while(f==0){
z+=mm*nn;
mm--,nn--;//如上文所说
if(mm==0||nn==0) f=1;//如果有一个为0,说明正方形最大的边长到了,就该结束循环了
}
c=(n+1)*n*(m+1)*m/4;//如上文所说
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?