1.首先,我们要先分析这个问题
2.从问题中寻找尽量符合的数学模型
3.通过大量确定实例来判断该模型的误差是否在极小范围内,若不是,返回第2步
4.思考该数学模型如何用函数定义
5.写程序并运行之后Debug
1.分析问题,这个矩形是由m行n列组成,我们有矩形的特征可以发现,我们只要分别找到两行和两列就可以找到一个矩形,我们只要找到有多少个这样的组合就可以找到矩形个数
2.分析模型,排列组合模型明显适配该问题
3.验证模型,我们分别给m和n取不同的数字,进行简单验证
4.我们先定义函数comm(m,n)表示组合数Cmn(m在下,不会用公式见谅) .可以用组合数的一个性质,comm(m,n)=comm(m-1,n-1)+comm(m-1,n)(这个式子可以这样理解,我们从m个人中选n个人,假如选到其中一个人,那么我们要从剩下的m-1个人里再选n-1个人,如果选不到这个人,那么就要从剩下的m-1个人里选n个人。)。
想要简便的求出该组合数,我们可以由上一条组合数的性质结合递归函数来求解
5.这是我自己写的
#include
using namespace std;
int comm(int a, int b) {
if (a < b)
return 0;
else if (a == b || b == 0)
return 1;
else return comm(a - 1, b - 1) + comm(a-1, b );
}
int main() {
int a, b;
cout << “Please cin a :” << endl;
cin >> a;
cout<<“Please cin b:”<<endl;
cin >> b;
cout << comm(a, b);
return comm(a, b);
}
//在我看来,这个程序还需要在不同的范围内测试才可以判断误差,但是作者水平有限,现在暂时不会规范的测试,并且本文有哪些不足之处,还请多多指教。
(结尾说明一下,这个问题我之前看到过有人说用对角点来找矩形,但我试了1个多小时也没想出来,大家也可以思考一下,当然,这个问题的方法有很多,看大家自己能不能再找出来了)
感谢大家耐心看完。