鱼C论坛

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

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

  [复制链接]
发表于 2016-11-15 09:27:58 | 显示全部楼层
  1. sum([n for n in range(1000) if (n%3==0 or n%5==0)])
复制代码

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

使用道具 举报

发表于 2016-11-18 19:51:24 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define MAX 1000
  4. int main()
  5. {
  6.     int i;
  7.         int sum=0;
  8.     for(i=0; i<MAX; i++)
  9.     {
  10.         if((i%3==0) ||( i%5)==0 )
  11.         {
  12.             sum=sum+i;
  13.         }
  14.     }
  15.     printf("%d 以下的自然数中,属于 3 或 5 的倍数的数字之和:%d \n",MAX,sum);
  16.     return 0;
  17. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-4 20:10:59 | 显示全部楼层
value = 0
num = [x for x in range(1,1001) if x %3==0 or x%5==0]
for each in num:
    value = value+each
print(value)   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-29 09:37:18 | 显示全部楼层
  1. summation = 0           #定义和变量
  2. i = 1                   #定义自然数变量
  3. while i < 1000:         #循环,让i从1到1000依次代入   
  4.     if i % 3 ==0 or i % 5 ==0:    #先检查i 是不是3的倍数,不是3的倍数再看是不是5的倍数
  5.         summation= summation + i  #和加上i
  6.         i += 1                    
  7.     else:
  8.         i += 1
  9. print(summation)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-5 22:51:55 | 显示全部楼层
  1. from time import time

  2. def method1(n):
  3.     start = time()
  4.     sum = 0
  5.     for i in range(1,n+1):
  6.         if i%3==0 or i%5==0:
  7.             sum +=i
  8.             #print(i)
  9.     print('sum=',sum)
  10.     end = time()
  11.     print('cost %.3f \'s' % (end - start))

  12. def method2(n):
  13.     start = time()
  14.     sum1 = (3+n//3*3)*(n//3)/2
  15.     sum2 = (5+n//5*5)*(n//5)/2
  16.     sum3 = (15+n//15*15)*(n//15)/2
  17.     sum = sum1 + sum2 - sum3
  18.     print('sum=',sum)
  19.     end = time()
  20.     print('cost %.3f \'s' % (end - start))

  21. method1(1000)
  22. method2(1000)
  23.         
复制代码


sum= 234168
cost 0.006 's
sum= 234168.0
cost 0.000 's
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-11 18:21:49 | 显示全部楼层
  1. %Matlab
  2. %% Problem1
  3. % 题目1:找出1000以下自然数中3和5的倍数之和        
  4. function Output=Problem1(Input)
  5. tic
  6. if nargin==0
  7. Input=1000;
  8. end
  9. Output=0;
  10. for ii=1:1:Input-1
  11.     if mod(ii,3)==0||mod(ii,5)==0
  12.         Output=Output+ii;
  13.     end
  14. end
  15. toc
  16. disp(['Problem1所用时间为',num2str(toc)])
  17. disp(['Problem1的答案为',num2str(Output)])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-17 21:16:30 | 显示全部楼层
看了大家的帖子,综合起来,写了下面的(也是233168):
  1. from time import time

  2. def method1(n):
  3.     start = time()
  4.     sum = 0
  5.     for i in range(1,n):
  6.         if i%3==0 or i%5==0:
  7.             sum +=i
  8.             #print(i)
  9.     print('sum=%d'%sum)
  10.     end = time()
  11.     print('cost %.3f \'s' % (end - start))

  12. def method2(n):       
  13.     start = time()
  14.     n =n-1
  15.     sum1 = (3+n//3*3)*(n//3)/2
  16.     sum2 = (5+n//5*5)*(n//5)/2
  17.     sum3 = (15+n//15*15)*(n//15)/2
  18.     sum = sum1 + sum2 - sum3
  19.     print('sum=%d'%sum)
  20.     end = time()
  21.     print('cost %.3f \'s' % (end - start))
  22.        
  23. def method3(n):       
  24.     start = time()
  25.     print sum(i for i in range(0,n) if i%3==0 or i%5==0)
  26.     end = time()
  27.     print('cost %.3f \'s' % (end - start))
  28.        
  29. def method4(n):
  30.     start = time()
  31.     sum = 0
  32.     for i in range(1,n):
  33.         if i*3<n:
  34.             sum +=i*3
  35.         else:
  36.                 break       
  37.         if i*5<n:
  38.                 sum +=i*5
  39.             if i*15<n:
  40.                 sum -=i*15
  41.     print('sum=%d'%sum)
  42.     end = time()
  43.     print('cost %.3f \'s' % (end - start))       
  44.                
  45. num=1000
  46. method1(num)
  47. method2(num)
  48. method3(num)
  49. method4(num)
复制代码

运行结果:
sum=233168
cost 0.000 's
sum=233168
cost 0.000 's
233168
cost 0.001 's
sum=233168
cost 0.001 's
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-17 21:28:20 | 显示全部楼层
可见1000之内运行时间难比较,如果num=100000,运行结果如下(时间就有差别了):
sum=2333316668
cost 0.016 's
sum=2333316668
cost 0.000 's
2333316668
cost 0.017 's
sum=2333316668
cost 0.010 's

结论:method2直接计算无异是最快的,
method4虽然繁复些,循环次数少了很多,如果数据量大还是省时些,
method3比method1慢一丁点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-20 16:51:01 | 显示全部楼层
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<string.h>
  4. using namespace std;
  5. #include<algorithm>
  6. int main()
  7. {
  8.     int i;
  9.     int sum=0;
  10.     sum+=(333*3)+333*(332/2)*3;
  11.     sum+=(199*5)+199*(198/2)*5;
  12.     sum-=(66*15)+(66/2)*(65)*15;
  13.     cout<<sum;
  14.     return 0;
  15. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-22 13:24:46 | 显示全部楼层
  1. a=[]
  2. for i in range(1,1000):
  3.     if i%3==0 or i%5==0:
  4.         a.append(i)
  5. b=set(a)
  6. c=0
  7. for i in range(1,1000):
  8.     if i in b:
  9.         c+=i
  10. print(c)
复制代码

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

使用道具 举报

发表于 2017-1-23 21:51:02 | 显示全部楼层

#    Python 3代码

n = 0
for num in range(1,1000) :
    if num % 3 == 0 or num % 5 == 0 :
        n = num + n
        num = num + 1
    else :
        num = num + 1
print (n)

#    解题思路:首先定义几个变量,通过循环找出从1—1000的每一个该找的值,然后把它们相加即可
#    下面附函数版本:

def summation(x=1,i=1,j=1) :
    num = 0
    n = 1
   
    if x <= 1 or i > x or j > x :
        print ('You had make a mistick,please chick it')
    else :
        for n in range(1,x) :
            if n % i == 0 or n % j == 0 :
                num = n + num
                n = n + 1
            else :
                n = n + 1
        print(num)
#    以上

看看C语言的一大长串,Python还真是方便初学者理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-2 01:26:42 | 显示全部楼层
  1. import time

  2. def multi_1(num):
  3.     '使用while循环'
  4.     count = 0
  5.     while num:
  6.         num -= 1
  7.         if num % 3 == 0 or num % 5 == 0:
  8.             count += num
  9.     return count

  10. def multi_2(num):
  11.     '使用for循环'
  12.     count = 0
  13.     for i in range(0, num):
  14.         if i % 3 == 0 or i % 5 == 0:
  15.             count += i
  16.     return count

  17. start_1 = time.clock()
  18. print(multi_1(1000))
  19. end_1 = time.clock()
  20. print('程序按while循环执行了%fs。' %(end_1 - start_1))

  21. start_2 = time.clock()
  22. print(multi_2(1000))
  23. end_2 = time.clock()
  24. print('程序按for循环执行了%fs。' %(end_2 - start_2))
复制代码


执行结果:
233168
程序按while循环执行了0.004329s。
233168
程序按for循环执行了0.002159s。

算法相同,for循环的速度竟然更快2333
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-19 16:23:53 | 显示全部楼层
  1. /*找出1000以下自然数中3和5的倍数之和*/

  2. #include <stdio.h>

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

使用道具 举报

发表于 2017-2-20 21:13:45 | 显示全部楼层
  1. print("""问题: 10 以下的自然数中,属于 3 或 5 的倍数的有 3, 5, 6 和 9,它们之和是 23,
  2. 找出 1000 以下的自然数中,属于 3 或 5 的倍数的数字之和。
  3. ----------------------------------------------------------------""")

  4. num = sum([x for x in range(1000) if (x%3==0 or x%5==0)])
  5. print('答案是: '+str(num))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-24 07:38:54 | 显示全部楼层
  1. s = 0
  2. for i in range(1000):
  3.         if i%3 == 0 or i%5 == 0:
  4.                 s += i
  5. print(s)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 16:20:40 | 显示全部楼层
a = []
for i in range(1,1000):
        if i%3 ==0 or i%5 == 0:
                a.append(i)               
print(sum(a))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-6 10:54:42 | 显示全部楼层
  1. sum=0
  2. for i in range(1,1000):
  3.     if i%3==0 or i%5==0:
  4.         sum+=i
  5. print(sum)
  6.    
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-9 15:37:53 | 显示全部楼层
#!/usr/bin/env python
#coding:utf-8

def Sum(n=10):
    num1=0
    for i in list(range(n)):
        if i%3 == 0 or i%5==0:
            num1+=i
    print(num1)


if __name__ == '__main__':
    Sum(1000)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-11 16:45:49 | 显示全部楼层
233168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-14 10:11:33 | 显示全部楼层
  1. number=999
  2. s=[]
  3. while number:
  4.     if number%3==0 or number%5==0:
  5.        s.append(number)
  6.     number-=1
  7. print(sum(s))
  8. print(s)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 10:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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