鱼C论坛

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

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

  [复制链接]
发表于 2018-1-4 10:30:56 | 显示全部楼层
#include <stdio.h>

int main(void)
{
        int i;
        long sum=0;
       
        for(i=1; i<1000; i++)
        {
                if (i%3==0 || i%5==0)
                {
                        sum=sum+i;
                }
         }
         printf("%ld",sum);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-31 00:11:28 | 显示全部楼层
  1. 1 #include <stdio.h>
  2.   2
  3.   3 int multiSum(int, int);
  4.   4
  5.   5 int multiSum(int max, int n)
  6.   6 {
  7.   7     int total, maxMulti;
  8.   8
  9.   9     maxMulti = max / n;
  10. 10     return  (maxMulti * (maxMulti + 1)) / 2 * n;
  11. 11 }
  12. 12
  13. 13 int main(void)
  14. 14 {
  15. 15     int total;
  16. 16     total = multiSum(1000, 3) + multiSum(1000, 5) - multiSum(1000, 3 * 5);
  17. 17     printf("%d\n", total); //234168
  18. 18     return 0;
  19. 19 }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 15:08:52 | 显示全部楼层
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i,sum=0;
  5.         for(i=0;i<1000;i++)
  6.         {
  7.                 if(i%3==0||i%5==0)
  8.                 {
  9.                         sum=sum+i;
  10.                 }
  11.         }
  12.         printf("%d\n",sum);
  13.         return 0;
  14. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-4 20:23:05 | 显示全部楼层
  1. sum1 = sum([i for i in range(1000) if not i%3 or not i%5])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-14 13:16:49 | 显示全部楼层
  1. def f(n):
  2.     s = 0
  3.     for i in range(n):
  4.         if i % 3 == 0 or i % 5 == 0:
  5.             s += i
  6.     return s
  7. num = 1000
  8. result = f(1000)
  9. print('1000以内,3或5的倍数的数字之和为:%d' % result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 17:30:55 | 显示全部楼层
public static void main(String args[]){
    //找出1000以下,3和5的倍数
        int n = 1000;
        int s = 0;

        HashSet<Integer> set = new HashSet<Integer>();

        for( int i = 1; i <= (n-1)/3; i++ ){
            set.add(i*3);
        }
        for( int j = 1; j <= (n-1)/5; j++ ){
            set.add(j*5);
        }
        //遍历求和
        Iterator it = set.iterator();
        while(it.hasNext()){
            s = s + Integer.valueOf(it.next().toString());
        }

        System.out.print(s);
    }


思路: 与其循环匹配1000次,不如在小于1000的范围内,算出3及5的倍数,利用HashSet 自动剔除重复数。得到结果
但是最后要求求和。所以又多了一个循环,实际计算量也并没有减少,反倒代码更长了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 14:22:01 | 显示全部楼层
  1. def multi3and5(maxnum):
  2.     sum = 0
  3.     for num in range(3, maxnum):
  4.         if num % 3 ==0 or num % 5 == 0:
  5.             sum += num
  6.     return  sum


  7. print multi3and5(1000)
复制代码


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

使用道具 举报

发表于 2018-4-1 17:17:34 | 显示全部楼层
public class SumOfMutipes3And5 {

    private  static long sum = 0;

    public long of3And5(long s){

        for (int i = 0;i<s;i++)
        {
            if(i%3 == 0) sum += i;
        }

        for (int j = 0;j<=s;j++)
        {
            if (j % 5==0) sum += j;
        }

        for (int k = 0;k<=s;k++)
        {
            if (k%15==0) sum -= k;
        }
        return  sum;
    }

    public static void main(String[] args) {
        SumOfMutipes3And5 sum1 = new SumOfMutipes3And5();
        System.out.println(sum1.of3And5(1000));
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 19:46:59 From FishC Mobile | 显示全部楼层
def sun3_5(n, con1, con2):
    sun = 0
    for i in range(n):
        if i % con1 == 0:
            sun += i
        elif i % con2 == 0:
            sun += i
    return sun
   
sun = sun3_5(1000, 3, 5)
print sun
233168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-11 19:54:48 From FishC Mobile | 显示全部楼层
看完各位大佬的 我在改进:
print sum([ i for i in range(1000) if (i % 3 == 0) or (i % 5 == 0)])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2018-5-24 18:12:08 | 显示全部楼层
本帖最后由 豆芽小包 于 2018-5-24 18:20 编辑

def pl(num):
   
    s = []
    sum = 0
    for i in range(int(num)):
        if (i%3==0) or (i%5==0):
            s.append(i)
    for x in s:
        sum = sum + x
    print(sum)

num = input('请输入一个正整数:')

pl(num)

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

使用道具 举报

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

使用道具 举报

发表于 2018-7-10 20:38:23 | 显示全部楼层
  1. num_of_3Multiples = 1000 // 3 + 1
  2. num_of_5Multiples = 1000 // 5 + 1
  3. num_of_3and5Multiples = 1000 // (3*5) + 1

  4. sum_of_both_them = 3 * sum(range(1, num_of_3Multiples))  +  5 * sum(range(1, num_of_5Multiples)) - 15 * sum(range(1, num_of_3and5Multiples))

  5. print(sum_of_both_them)
复制代码

答案是234168?
如有不对,多请指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-16 16:35:04 | 显示全部楼层
#include <stdio.h>
int main(void)
{
        int sum=0,i;
        for(i=1;i<1000;i++)
        {
                if(i%3==0 || i%5==0)
                {
                        sum+=i;
                }
        }
                printf("%d\n",sum);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-19 17:20:11 | 显示全部楼层
sum(x for x in range(1000)if x%3==0 or x%5==0)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-10 22:35:44 | 显示全部楼层
  1. def multiple3and5():
  2.     sum_res = 0
  3.     s3 = 0
  4.     s5 = 0
  5.     mul3 = 1
  6.     mul5 = 1
  7.     m3 = (1000 - 0.1)  / 3
  8.     m5 = (1000 - 0.1)  / 5
  9.     while mul3 <= m3:
  10.         if mul3 % 5 != 0:
  11.             s3 += mul3
  12.         mul3 += 1

  13.     s5 = ((1 + int(m5)) * int(m5)) / 2
  14.         
  15.     sum_res = int(s3 * 3 + s5 *5)
  16.     return sum_res

  17. a = multiple3and5()
  18. print(a)
复制代码


分为两个等差数列计算,其中一个采用循环,因为要剔除那些能同时被3和5整除的数字,另外一个直接用等差数列得到答案,这样就可以只用很少的时间开销去解答本题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-14 11:09:14 | 显示全部楼层
list1=[]
for i in range(1,1000):
    if i % 3 ==0 or i % 5 ==0:
        list1.append(i)

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

使用道具 举报

发表于 2018-8-23 09:57:35 | 显示全部楼层
  1. sum([x for x in range(1000) if x%5==0 or x%3==0 ])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-25 17:08:22 | 显示全部楼层
本帖最后由 茶侘酒寂 于 2018-8-25 17:10 编辑

pyhton:233168

  1. def mult_3():                   #找出3的倍数
  2.     t = 0
  3.     i = 3
  4.     for k in range(1000):
  5.         if (i*k > 1000):
  6.             return t
  7.        # print(k)
  8.         t = t + i * k

  9. def mult_5():
  10.     t = 0
  11.     j = 5
  12.     for k in range(1000):
  13.         if (j*k >= 1000):       #找出5的倍数并排除3倍数
  14.             return t
  15.         if (k%3 == 0):
  16.             #print(k)
  17.             continue
  18.         #print(k)
  19.         t = t + j * k


  20. t = mult_3() + mult_5()         #相加,这样运算为535次
  21. print(t)

复制代码

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 16:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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