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); }
转载请注明原文地址: https://ju.6miu.com/read-20294.html