鸡兔同笼问题是这样一个问题:
现有鸡、兔合装在一个笼子里。数头一共100个头,数脚一共300只脚。问有多少只鸡多少只兔?
在这里讨论这个问题的解法当然太小儿科了。但是y_tab这个C语言解释器只提供了1维数组。如果需要用到2维数组时,该怎么做?
现在演示用行列式和克莱姆法则求解这个问题。
方程组:
ax +by =e;
cx +dy =f;
系数矩阵为:
2 4 300
1 1 100
写成数组是,
a[] = {
2, 4, 300,
1, 1, 100
};
func i(row, col) {return row*3+col;}
函数i()对2维数组作下标转换。所以这道题的系数矩阵就是:
a[i(0,0)] a[i[0,1)] a[i(0,2)]
a[i(1,0)] a[i(1,1)] a[i(1,2)]
所以求解是,
func det(a,b,c,d) {return a*d -b*c;}
detx= det(a[i(0,2)], a[i(0,1)], a[i(1,2)], a[i(1,1)]);
dety= det(a[i(0,0)], a[i(0,2)], a[i(1,0)], a[i(1,2)]);
deta= det(a[i(0,0)], a[i(0,1)], a[i(1,0)], a[i(1,1)]);
print "x,y:", detx/deta, dety/deta;
答案是50 50。
clike
a[] = {
2, 4, 300,
1, 1, 100
};
func i(row, col) {return row*3+col;}
func det(a,b,c,d) {return a*d -b*c;}
detx= det(a[i(0,2)], a[i(0,1)], a[i(1,2)], a[i(1,1)]);
dety= det(a[i(0,0)], a[i(0,2)], a[i(1,0)], a[i(1,2)]);
deta= det(a[i(0,0)], a[i(0,1)], a[i(1,0)], a[i(1,1)]);
print "x,y:", detx/deta, dety/deta;