解两道四年级奥数题(等差数列)玩玩

1、1~200这200个连续自然数的全部数字之和是________。

2、2,4,6,……,2008这些偶数的所有各位数字之和是________。

这两道题算易错吧,这里求数字之和,比如124这个数的全部数字之和是1+2+4=7。

两题数学解题思路一样,数字之和,数字无非就是0-9这10个数,要求和0可以忽略,所以就是1-9这九个数。那么我们只要算出每个数出现几次就可以了。

第一题:

1出现在个位数的情况有,1,11,21,...191,所以一共有(0,1,2,19)组一共出现20次。

同理2-9也是20次,所以个位数所有数字和为(1+2+...+9)*20=900。

1出现在十位数的情况有:(10,11,...19),(110,111,...119)两组,一组10个数,所以也出现20次。

同理2-9也是20次,所以十位数所有数字和为(1+2+...+9)*20=900。

1出现在百位数的情况有,100,101...199一共100次。

2出现在百位数的情况只有200一个。

所以百位数所有数字和为100*1+2=102。

综上,1~200这200个连续自然数的全部数字之和是:900+900+102=1902。

第二题:

个位数只能是偶数,所以:

2出现在个位数的情况有2,12,22,...2002,所以一共有(0,1,2,...200)组一共有201次。

同理4,6,8出现在个位数的情况为201次,所以所有个位数字之和为201*(2+4+6+8)=4020。

十位数开始可以奇数了,所以从1开始算:

1出现在十位数的情况有:(10,12,14,16,18),(110,112,114,116,118)...(1910,1912,19141916,1918),一共有(0,10,20...190)共20组5个数,也就是一共出现100次。

同理2,9也是100次,所以十位数所有数字和为(1+2+...+9)*100=4500。

1出现在百位数的情况有:(100,102,...198)(1100,1102,...1198)一共2组50个数,所以一共出现100次

同理2-9在百位也各出现100次,所以百位数所有数字和为(1+2+...+9)*100=4500。

1出现在千位数的情况有1000,1002,1004...1998一共出现500次

2出现在千位数的情况有2000,2002,...2008一共出现5次。

3-9没在千位数出现,所以千位数所有数字和为500*1+5*2=510。

综上,2,4,6,……,2008这些偶数的所有各位数字之和是4020+4500+4500+510=13530。

以上是数学的解法,下面用编程python的解法,python的解法主要是利用遍历每个数的所有数字和。代码如下:

第一题:

n = 0
r = 0

while n < 200:
    n = n + 1
    r = r + n % 10 #累加所有个位数
    if 9 < n < 100:
        r =r + n // 10#累加所有两位数的十位数
    if n >= 100:
        r = r + n // 100 + n //10 % 10#累加所有三位数的百位数+十位数

print(r)

第二题:

n = 0
r = 0

while n < 2008:
    n = n + 2
    r = r + n % 10 #累加所有个位数
    if 9 < n < 100:
        r = r + n // 10#累加所有两位数的十位数
    if 100 <= n < 1000:
        r = r + n // 100 + n // 10 % 10 #累加所有三位数的百位数和十位数
    if n >= 1000:
        r = r + n // 1000 + n // 100 % 10 + n // 10 % 10 #累加所有四位数的千位数+百位数+十位数


print(r)

儿子提出把所有数的数字提到一个列表中,再提取求和,方法不错,写了下代码:

n = 0
r = 0
s = []
while n < 2008:
    n = n + 2
    for i in str(n):
        s.append(i)
    s = s
for k in s:
    r = r +int(k)
print(r)

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值