鱼C论坛

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

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

  [复制链接]
发表于 2019-2-5 11:25:57 | 显示全部楼层
方法比较直接简单

#include<stdio.h>
int main()
{
   int sum = 0,number1 = 0,number2 = 0,i,j;
   for (i=1;i<=1000;i++)
   {
      if(i%3==0)
          {
         number1 += i;

          }
         
   }
   for (j=1;j<=1000;j++)
          {
                  if(j%5==0)
                  {
                          number2 += j;
                  }
          }
   sum = number1+number2;
   printf ("%d\n",sum);
   return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-5 21:21:31 | 显示全部楼层
各位为什么我用Python算出来的是234168
zong = 0
for shu in range(1001):
    if shu % 3 == 0 or shu % 5 == 0:
        zong += shu
print(zong)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-2-16 22:32:06 | 显示全部楼层
#include<stdio.h>
int main()
{
        int i;
        int sum;
        sum = 0;
        for(i = 1; i < 1000; i++){
                if(i%3==0||i%5==0)
                        sum+=i;
        }
        printf("1000以内3和5的倍数和为%d",sum);
        return 0;
}

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

使用道具 举报

发表于 2019-2-18 14:52:43 | 显示全部楼层
用了三种方法做这个题,每一次比上一次都会快一点,因为题目很简单,所以就想简单的题目怎么做出更好的算法,所以就尝试的改进,事实上第二个代码就比第一个快了一半多,第三个比第一个快了近三倍,但是我感觉应该会有更好的算法,只是我没想到,接下来贴上我的代码(在题目的基础上加了两个0,不然clock算出来没数字)
第一个:clock_t begin,end;
        int i,sum=0;
        begin=clock();
        for(i;i<1000000;i++){
                if(i%3==0||i%5==0) sum+=i;
        }
        end=clock();
        printf("%d time=%d",sum,end-begin);
运行时间time=40多
第二个:clock_t begin,end;
        int i,sum=0;
        begin=clock();
        for(i=3;i<1000000;i+=3){
                if(i%3==0&&i%5!=0) sum+=i;
        }
        for(i=0;i<1000000;i+=5){
                sum+=i;
        }
        end=clock();
        printf("%d time=%d",sum,end-begin);
运行时间time=20左右
第三个:clock_t begin,end;
        int i,sum=0;
        begin=clock();
        for(i=3;i<1000000;i+=3){
                if(i%5==0) continue;
                else if(i%3==0) sum+=i;
        }
        for(i=0;i<1000000;i+=5){
                sum+=i;
        }
        end=clock();
        printf("%d time=%d",sum,end-begin);
运行时间time=15左右
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-20 09:46:26 | 显示全部楼层
  1. sum = 0
  2. for i in range(1,1000):
  3.     if i % 3 == 0 or i % 5 == 0:
  4.         sum = sum+i
  5.         i += 1

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2019-3-7 22:56:05 | 显示全部楼层
C语言的
#include<stdio.h>
int main(){
     int sum=0;
     for (int i=3;i<=1000;i++){
           if (i%3==0||i%5==0){
                  sum+=i;
          }
      }
     printf("%d\n",sum);
    return 0;
}
答案是234168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-17 21:08:30 | 显示全部楼层
def p1():
    temp = 0
    for i in range(1000):
        if not i%3 or not i%5:
            temp += i
    print(temp)
p1()

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

使用道具 举报

发表于 2019-4-17 21:09:48 | 显示全部楼层
count = 0
for i in range(20):
    if i %3 ==0 or i %5 ==0:
        count +=i
print(count)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-31 19:36:31 | 显示全部楼层
我的答案是233168。
C语言:
  1. #include<stdio.h>
  2. int main()
  3. {
  4.                 int sum = 0;
  5.                 int i;
  6.                 for (i = 1; i < 1000; i++)
  7.                                 if (i%3 == 0 || i%5 == 0)
  8.                                         sum += i;               
  9.                 printf ("%d",sum);
  10.                 return 0;       
  11. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-31 19:39:40 | 显示全部楼层
蓝炎彼岸花 发表于 2019-5-31 19:36
我的答案是233168。
C语言:

好像这样1000没算到,是不是要i <= 1000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 17:14:35 | 显示全部楼层
int main()
{
    int i;
    int sum1=0,sum2=0,sum3=0;
    for(i=1;i<1000;i++)
    {
        if(i%3==0)
        {

            sum1+=i;
        }


    }
    for(i=1;i<1000;i++)
    {
        if(i%5==0&&i%3!=0)
        {
            sum2+=i;
        }

    }
    sum3=sum1+sum2;
    printf("%d\n",sum3);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-14 09:10:10 | 显示全部楼层
本帖最后由 doodu 于 2019-6-14 10:09 编辑

'''判断一个数值范围内,几个数字共同倍数的数字的和'''
def sum_Mul(num_region, a, b):
        arr = []

        for i in range(0,num_region):
                if not(i%a) or not(i%b):
                        arr.append(i)

        arr = set(arr) #实际上判断语句中是‘或’,满足一个条件即可。
        sum_end = sum(arr)
        return sum_end

print(sum_Mul(1000, 3, 5))


效率有点低,但是很安全,使用len()可以查询列表里面收集的数字个数,
----是相等的!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-20 18:43:50 | 显示全部楼层
  1. #include<stdio.h>
  2. int main(){
  3.         int len3 = 1000 / 3;
  4.         int len5= 1000 / 5;
  5.         int len15 = 1000 / 15;
  6.         printf("%d",(1 +  len3) * len3 / 2 * 3 + (1 + len5) * len5  / 2 * 5 - (1 + len15) * len15 / 2 * 15);
  7.         return 0;
  8. }
复制代码


我觉得不用循环 直接用高斯的等差数列求和 直接求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-25 12:15:15 | 显示全部楼层
a=input('please input natural number');
s=0;
for i=1:a-1
    if mod(i,3)==0|| mod(i,5)==0
        s=s+i;
    end     
end
disp(s)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 11:03:16 | 显示全部楼层
  1. a = (3 + 999) * (999 / 3) / 2
  2. b = (5 + 995) * (995 / 5) / 2
  3. c = (15 + 990) * (990 / 15) / 2
  4. print(int(a + b - c))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-21 16:39:26 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-4-18 12:45 编辑

Python:
  1. print(sum(i for i in range(1,1000) if not(i%3 and i%5)))
复制代码


C++
  1. #include<iostream>
  2. using namespace std;

  3. int main() {
  4.         int sum = 0;

  5.         for (int i = 1; i < 1000; i++) {
  6.                 sum += !(i % 3 && i % 5);
  7.         }

  8.         cout << sum << endl;
  9.         return 0;
  10. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-21 17:05:40 | 显示全部楼层
  1. public static void main(String args[]){
  2.         int total=0;
  3.         for (int i=0;i<1000;i++){
  4.             if(i%3==0||i%5==0){
  5.                 total+=i;
  6.             }
  7.         }
  8.         System.out.println(total);
  9.     }
复制代码

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

使用道具 举报

发表于 2019-7-24 10:59:45 | 显示全部楼层

大家帮我看看吧~

本帖最后由 爱因斯坦程序员 于 2019-7-24 11:02 编辑

我的想法是这样的,但是不知道错在哪里,答案和暴力相加得出来的答案不一样,希望有小伙伴可以帮我看看我到底钻到哪个牛角尖里去了
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(){
  4.     int s,s3,s5;
  5.     int n5=999/5,n3=999/3;//分别得出1000一下共有几个倍数
  6.     s3=((n3*3)+((n3*(n3-1))/2))*3;//等差数列求和公式
  7.     s5=((n5*5)+((n5*(n5-1))/2))*5;
  8.     s=s3+s5;//将3的倍数和5的倍数相加
  9.     printf("%d\n",s);
  10. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 05:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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