鱼C论坛

 找回密码
 立即注册
楼主: 欧拉计划

题目1:找出1000以下自然数中3和5的倍数之和

  [复制链接]
发表于 2017-3-14 10:21:13 | 显示全部楼层

太麻烦了,i%3==0 or i%5==0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 16:10:04 | 显示全部楼层
sum = 0
for a in range(1,1000):
    if a%3 == 0 or a%5 == 0:
        sum += a
print(sum)
结果:233168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-19 23:43:50 | 显示全部楼层
  1. #include<stdio.h>
  2. int main(){
  3.         int a;
  4.         int b;
  5.         int c;
  6.         int d;
  7.         for( a=1;a<=1000;a++){
  8.         b=a*3;
  9.         c=a*5;
  10.         d=b+c+d;
  11. }
  12.         printf("%d",d);
  13.         getchar();
  14. }
  15. ~                       
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-3 00:04:56 | 显示全部楼层
sum([x for x in range(1000) if x%3==0 and x%5==0])
结果:233168。
思路:通过for循环遍历0-999,对3和5的倍数取出存入一个列表中,再通过sum函数将生成的列表元素(也就是3和5的倍数)进行相加,算出结果。
疑问:在判断3和5倍数的地方有没有更好的写法?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-30 19:19:14 | 显示全部楼层
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         const int x = 1000;
  5.         int sum = 0;
  6.         for (int i = 3; i < x; i++)
  7.         {
  8.                 if (i % 3 == 0 || i % 5 == 0)
  9.                 {
  10.                         sum += i;
  11.                 }
  12.         }
  13.         printf("%d\n", sum);
  14.         return 0;
  15. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-4 12:46:19 | 显示全部楼层
答案正解233168
这里用数学方法来缩短程序运行时间,计算3的求和+5的求和-多余的15的求和即可。

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. //为简化代码,只支持30以上的运算
  4. int main(void)
  5. {
  6.         int lim,Sn=0;
  7.         printf("enter the limit:\t");
  8.         scanf("%d",&lim);
  9.         if(lim<31)        exit(1);
  10.        
  11.         lim--;
  12.         Sn=(3+lim/3*3)*(lim/3)/2+(5+lim/5*5)*(lim/5)/2-(15+lim/15*15)*(lim/15)/2;

  13.         printf("sum = %d",Sn);
  14.         return 0;
  15. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-14 20:11:23 | 显示全部楼层
  1. mul3 = 3
  2. mul5 = 5
  3. mul15 = 15
  4. lim = 1000
  5. if mul3 <= lim:
  6.     mul3 += 3
  7. if mul5 <= lim:
  8.     mul5 += 5
  9. if mul15 <= lim:
  10.     mul15 += 15
  11. sum = mul3 + mul5 - mul15
复制代码



请大神指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-14 20:28:45 | 显示全部楼层
  1. mul3 = 3
  2. mul5 = 5
  3. mul15 = 15
  4. lim = 1000
  5. sum3 = 3
  6. sum5 = 5
  7. sum15 = 15
  8. while mul3 < lim:
  9.     mul3 += 3
  10.     sum3 +=mul3
  11. while mul5 < lim:
  12.     mul5 += 5
  13.     sum5 += mul5
  14. while mul15 < lim:
  15.     mul15 += 15
  16.     sum15 += mul15
  17. sum = sum3 + sum5 - sum15
  18. print(sum)
复制代码



求大神给看下是哪里错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-14 20:35:21 | 显示全部楼层
gongxiaobo2006 发表于 2015-4-24 14:26
把代码贴一下,看看对不对,哪位大婶有牛鼻的,希望不吝赐教阿!
sum=0
for i in range(0,1000):

不用写i = i+1
sum = 0
for i in range(1000):
    if i%==0 or i%5==0:
        sum +=i
print(sum)

这样子就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-17 10:31:16 | 显示全部楼层
  1. i = 1
  2. m = 1
  3. while i <= 1000:
  4.     if i % 3 == 0 or i % 5 == 0:
  5.         m = m + i
  6.     i += 1
  7. print(m)
复制代码

我认为不用再去区分是不是同时是3和5的倍数,应为3和5的倍数也符合if条件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-18 19:35:17 | 显示全部楼层
  1. sum = 0
  2. i = 0
  3. while i<1000:
  4.     if i%3==0 or i%5==0:
  5.         sum = sum + i
  6.     i = i + 1
  7. print(sum)
复制代码

Python新手,结果是233168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-31 07:51:54 | 显示全部楼层
用的是python,结果是233168
def natural(n):
    sum = 0
    for each in range(n):
        if each % 3 == 0 or each % 5 == 0:
            sum = sum + each
    return sum
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-4 20:35:00 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-7-2 18:29 编辑
  1. count = 0
  2. for i in range(1, 1000):
  3.     if not i % 3 or not i % 5:
  4.         count += i
  5. print(count)
复制代码

答案:233168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 16:25:56 | 显示全部楼层
  1. def sum(to):
  2.     result = 0
  3.     for i in range(1,to):
  4.         if i%3 == 0 or i%5 == 0:
  5.             result += i
  6.     return result

  7. print(sum(1000))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 16:27:52 | 显示全部楼层
本帖最后由 悠然随心 于 2017-6-15 16:34 编辑
  1. def sum(to):
  2.     result = 0
  3.     i = 3
  4.     while i < to:
  5.         result += i
  6.         i += 3
  7.             
  8.     i = 5
  9.     while i < to:
  10.         result += i
  11.         i += 5
  12.             
  13.     i = 15
  14.     while i < to:
  15.         result -= i
  16.         i += 15
  17.             
  18.     return result

  19. print(sum(1000))
复制代码
这种写法代码长一些,但运行效率比上一楼要高
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-6-22 17:42:04 | 显示全部楼层
  1. num_list = []
  2. for i in range (1,1000):
  3.     if i % 3 == 0 or i % 5 == 0:
  4.         num_list.append(i)

  5. print (sum (num_list))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-1 17:29:31 | 显示全部楼层
简单粗暴

  1. #include <stdio.h>

  2. int tot;

  3. int main()
  4. {
  5.         for (int i = 3; i < 1000; i++)
  6.                 if (i % 3 == 0 || i % 5 == 0)
  7.                         tot += i;
  8.         printf("%d", tot);
  9.     return 0;
  10. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-1 17:58:05 | 显示全部楼层
本帖最后由 fatsky 于 2017-7-1 18:04 编辑

仿筛法:

  1. #include <cstdio>

  2. int tot,num[1000];

  3. int main()
  4. {
  5.         for (int i = 3; i < 1000; i += 3) num[i] == 1;
  6.         for (int i = 5; i < 1000; i += 5) num[i] = 1;
  7.         for (int i = 3; i < 1000; i++)
  8.                 if (num[i])tot += i;
  9.         printf("%d", tot);
  10.     return 0;
  11. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-3 17:21:56 | 显示全部楼层
本帖最后由 Plinskin 于 2017-7-3 17:27 编辑

print "To Find The Sum Of All The Multiples Of 3 Or 5 Below 1000"

counterNum=0
Sum = 0
i = 0

while  i <= 1000:
    if i % 3 == 0 or i % 5 == 0:
        counterNum = i
        Sum = Sum + counterNum
        i += 1
    else:
        i += 1

print "the Final Sum is:" + str(Sum)


===运行结果====
/usr/bin/python /Users/plinskin/PycharmProjects/untitled1/分数.py 1
To Find The Sum Of All The Multiples Of 3 Or 5 Below 1000
the Final Sum is:234168

Process finished with exit code 0

为啥我算出来是234168,我看了步进,在15这种即整除3又整除5的地方也只计算一次呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-3 17:33:56 | 显示全部楼层
悠然随心 发表于 2017-6-15 16:27
这种写法代码长一些,但运行效率比上一楼要高

确实是,参与计算的都是符合要求的数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 15:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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