一道不允许编程求解的小学奥数题目

这是一个不定方程求解问题

购物账单显示
商品 A 的单价是 7.98 元,商品 B 的单价是 18.70 元,商品 C 的单价是 35.50 元;总共花费 1000 元。
问:三种商品各买了几件?

要求很简单:这是一道小学奥数题,不允许用编程方法求解


琢磨了许久,才找到了数学求解方法。


,商品 A、B、C 的件数分别为正整数 A、B、C
7.98A + 18.70B + 35.50C = 1000.00
798A + 1870B + 3550C = 100000

A 的个位必须是 5,令 A = 10K-5,K 为正整数
798K + 187B + 355C = 10000 + 399
187B = 10399 - 798K - 355C

由上述方程得到:
B = ( 10399 - 798K - 355C ) / 187
B = 55 - 4K - C + ( 114 - 50K - 168C ) / 187
B = 55 - 4K - C - (50K + 168C - 114 ) / 187
C ≤ ( 10399 - 798 - 187 ) / 355 = 26,即:C = [ 1,26 ]
K ≤ ( 10399 - 187 - 355 ) / 798 = 12,即:K = [ 1,12 ]

187 = 11 × 17
B 为整数,( 50K + 168C - 114 ) / 11 必须为整数
即:D = ( 6K + 3C - 4 ) / 11
又,( 50K + 168C - 114 ) / 17 也必须为整
即:E = ( 16K + 15C - 12 ) / 17 = ( 17K + 17C - 17 - K - 2C + 5 ) / 17等价于 E = ( K + 2C - 5 ) / 17

C = [ 1,26 ]
K = mod [ 17 - mod ( 2C - 5, 17 ), 17 ]
即:对于确定的 C,求出 ( 2C - 5 ) 除于 17 的余数与 17 的差值,若差值大于 17,则减去 17
26个 ( K, C ) 组合为
( 3, 1 ),( 1, 2 ),( 16, 3 )( 14, 4 ),( 12, 5 ),( 10, 6 ),( 8, 7 ),.( 6, 8 ),( 4, 9 ),( 2, 10 ),( 0, 11 )( 15, 12 )( 13, 13 ),( 11, 14 ),( 9, 15 ),( 7, 16 ),( 5, 17 ),( 3, 18 ),( 1, 19 ),( 16, 20 )( 14, 21 ),( 12, 22 ),( 10, 23 ),( 8, 24 ),( 6, 25 ),( 4, 26 )
其中 7 组 K 值不符 1 ≤ K ≤ 12,见加粗的组合舍去

将剩余 19个 ( K, C ) 组合代入 D 表达式验算,仅 ( K, C ) = ( 5, 17 ) 时,D 有正整数解
得:K = 5,C = 17,A = 10K - 5 = 45
代入 B 表达式,B = 2

所以, A = 45,B = 2,C = 17,且为唯一解


后记:

这显然不是一道简单的小学奥数题目。
但是,它确实可以通过数学方法求解,并证明它有唯一解,而且只需要运用小学数学知识。


附:编程求解(也是枚举求解和证明)的 fortran 代码

$freeform

integer a,b,c

do a=1,100000/798
   do b=1,100000/187
      do c=1,100000/355

	     if(798*a+1870*b+3550*c==100000) then
            m=m+1
		    write(*,'(i20.3,a,3i5)') m,'      ==>      ',a,b,c
	     end if
	   
	  end do
   end do
end do

end     

输出:

         001      ==>         45    2   17


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值