数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 1596|回复: 3

在 123456789 中,选择若干位置放入加号,使得计算结果为 153

[复制链接]
发表于 2017-6-12 06:55 | 显示全部楼层 |阅读模式
这是台湾网友 stu055031 发表在“陆老师的《数学中国》园地”的一个帖子,

欢迎大家一起来想想如何解答:

在123456789這數中,數字與數字間選取若干個適當位置放入加號

(數字順序不可更動)使得計算結果為153,例如:1+2+3+45+6+7+89=153

試問除了上例之外,還有幾種不同的可能情形

 楼主| 发表于 2017-6-12 10:27 | 显示全部楼层
本帖最后由 luyuanhong 于 2017-6-12 10:44 编辑

  在 123456789 中,选择若干位置放入加号,使得计算结果为 153 。

  首先,因为 1+2+3+4+5+6+7+8+9=45 ,所以,相加的项不可能都是一位数

    其次,如果相加的项中有三位数,显然只可能是 123 ,与 153 相差 30 ,

剩下数字 4+5+6+7+8+9=39 ,不等于 30 ,如果凑成一些二位数,则超过 30 。

所以,相加的项中不可能有三位数

   可见,相加的项中,必定有一些是一位数,有一些是二位数。

   设所有相加项中,十位数字之和为 x ,个位数字之和为 45-x 。

   因为各项相加的总和为 10x+(45-x)=153 ,即有 9x=108 ,解得 x=12 。

   经过搜索,123456789 中若干个不同的数相加等于 12 ,有下列 11 种情形:

(1)1+2+3+6=12 ,但因为 1,2 相连,1 不可能成为十位数字,这种情形无解。

(2)1+2+4+5=12 ,但因为 1,2 相连,1 不可能成为十位数字,这种情形无解。

(3)1+3+8=12 ,这种情形对应于原题的一个解 12+34+5+6+7+89=153 。

(4)1+4+7=12 ,这种情形对应于原题的一个解 12+3+45+6+78+9=153 。

(5)1+5+6=12 ,但因为 5,6 相连,5 不可能成为十位数字,这种情形无解。

(6)2+3+7=12 ,但因为 2,3 相连,2 不可能成为十位数字,这种情形无解。

(7)2+4+6=12 ,这种情形对应于原题的一个解 1+23+45+67+8+9=153 。

(8)3+4+5=12 ,但因为 3,4 相连,3 不可能成为十位数字,这种情形无解。

(9)3+9=12 ,但因为 9 排在最后,9 不可能成为十位数字,这种情形无解。

(10)4+8=12 ,这种情形对应于原题的一个解 1+2+3+45+6+7+89=153 。

(11)5+7=12 ,这种情形对应于原题的一个解 1+2+3+4+56+78+9=153 。

    由以上分析可知,本题共有下列 5 种解:

                12+34+5+6+7+89=153 。

                12+3+45+6+78+9=153 。

                1+23+45+67+8+9=153 。

               1+2+3+45+6+7+89=153 。

               1+2+3+4+56+78+9=153 。
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-12 16:55 | 显示全部楼层
下面是一段 python 语言的小代码,处理一般的“分拆”问题.



  1. from math import *

  2. def splt(n,k):
  3.     d = 10**k
  4.     a = n%d
  5.     b = (n-a)/d
  6.     return a,b
  7.    
  8. def fds(n,k):
  9.     if n < 1:
  10.         return []
  11.     if k < n and n < 10:
  12.         return []
  13.     if k == n:
  14.         return [[k]]
  15.     ss = []
  16.     m = 0
  17.     while True:
  18.         m += 1
  19.         a,b = splt(n,m)
  20.         if b == 0:
  21.             break
  22.         if a == 0:
  23.             continue
  24.         tt = fds(b,k-a)
  25.         ll = len(tt)
  26.         if ll > 0:
  27.             for j in range(ll):
  28.                 (tt[j]).append(a)
  29.             ss = ss+tt
  30.     return ss
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2017-6-12 22:22 | 显示全部楼层
谢谢楼上 elim 的解答。我已将此帖转贴到“陆老师的《数学中国》园地”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2024-4-26 16:47 , Processed in 0.091797 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表