五家共井(第1届第3题)
题目要求
问题描述:
古代数学巨著《九章算数》中有这么一道题叫“五家共井,甲二绠(汲水用的井绳)不足,如(接上)乙一绠;乙三绠不足,如丙一绠;丙四绠不足,如丁一绠;丁五绠不足,如戊一绠;戊六绠不足,如甲一绠,皆及。
翻译成白话意思就是:五家人共用一口井,甲家的绳子用两条不够,还要再用乙家的绳子一条才能打到井水;乙家的绳子用三条不够,还要再用丙家的绳子一条才能打到井水;丙家的绳子用四条不够,还要再用丁家的绳子一条才能打到井水;丁家的绳子用五条不够,还要再用戊家的绳子一条才能打到井水;戊家的绳子用六条不够,还要再用甲家的绳子一条才能打到井水。
最后问:井有多深?每家的绳子各有多长?
样例输入:无
样例输出:各家绳长以及井深。
解决方案
翻译成白话后,此题秒懂。
设甲乙丙丁戊各家绳长分别为a,b,c,d,e,井深为h,则:
2a + b = h ①
3b + c = h ②
4c + d = h ③
5d + e = h ④
6e + a = h ⑤
观察此方程组,5个等式,6个未知数,那么如果方程一定有多组解,即解不唯一。
整理上述方程组可得:
a=(265/721)h
b=(191/721)h
c=(148/721)h
d=(129/721)h
e=(76/721)h
以此为切入点,我们这里假设绳长、井深均为正整数,且井深不会超过一万米,且那么井深可能的最小取值为721,此时a、b、c、d、e大小分别为265、191、148、129、76。
源码示例
略
结果展示
略
小结
这个题看似简单,实际也很简单,稍加换算便可得出需要的结果,但是如果需求变了呢?换成上百个人错综复杂的关系,再去手动解是不是得累死?如果用循环死磕,那么电脑会累死。如果先化简一部分再交给电脑处理,又不知道化简到什么地步让电脑处理最合适...
有没有一种通用的解法来解这种题?换句话说用没有通用的算法来解多元一次方程组?有的,利用矩阵!
线性代数里学过用矩阵的初等变换解多元一次方程组(高斯消元法),所以只需要编一些针对矩阵初等变换的函数,以后遇到这种题就可以直接输入系数求解了。
这个算法好不好编?其实也不难,无非就是循环加判断,有时间不妨一试!