复赛 棋盘问题"/>
NOIP 1997 普及组 复赛 棋盘问题
NOIP 1997 普及组 复赛 棋盘问题
1.初看没什么头绪,但画图模拟,很快能发现好的算法。
2.采用坐标方式,确定左上角,右下角的坐标,进行减法处理,算出边长,很快能数出长方形、正方形个数。
3.该题难在数学建模。
附上AC代码,编译环境Dev-C++4.9.9.2
#include <stdio.h>
int main(){
int n,m;
int r1,c1,r2,c2,e1,e2;
int square=0,rect=0;
scanf("%d%d",&n,&m);
for(r1=0;r1<=n;r1++)
for(c1=0;c1<=m;c1++)
for(r2=r1+1;r2<=n;r2++)
for(c2=c1+1;c2<=m;c2++){
e1=r2-r1;
e2=c2-c1;
if(e1>0&&e2>0)
if(e1==e2)
square++;
else
rect++;
}
printf("%d %d\n",square,rect);
}
更多推荐
NOIP 1997 普及组 复赛 棋盘问题
发布评论