鱼C论坛

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

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

  [复制链接]
发表于 2020-8-7 20:33:35 | 显示全部楼层
等差数列求和公式  直接的结果  3*5=15   15的倍数的数列

点评

应该是 3的倍数的数列的和 加上 5的倍数的数列的和 减去 15的倍数的数列的和  发表于 2020-8-8 13:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-10 09:23:51 | 显示全部楼层
583164028 发表于 2020-8-7 20:33
等差数列求和公式  直接的结果  3*5=15   15的倍数的数列

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

使用道具 举报

发表于 2020-8-21 14:46:11 | 显示全部楼层
  1. a = int(999 / 3)
  2. b = int(999 / 5)
  3. c = int(999 / 15)
  4. sum = (a*3 + a*(a-1)/2*3) + (b*5 + b*(b-1)/2*5) - (c*15 + c*(c-1)/2*15)
  5. print(sum)
复制代码


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

使用道具 举报

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

使用道具 举报

发表于 2020-9-14 13:45:14 | 显示全部楼层
  1. //1000以下自然数中3和5的倍数之和

  2. #include <stdio.h>

  3. int main1()
  4. {
  5.         int count = 0;
  6.         for (int i = 1; i < 1000; i++)
  7.         {
  8.                 if (i % 5 == 0 || i % 3 == 0)
  9.                 {
  10.                         count += i;
  11.                 }
  12.         }
  13.         printf("1000以下自然数中3和5的倍数之和  %d", count);
  14. }
复制代码


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

使用道具 举报

发表于 2020-10-11 11:59:43 | 显示全部楼层
def main():
    total = 0
    for i in range(1000):
        if (i%3 == 0) or (i%5 == 0):
            total = i + total
            print("i->",i)

    print("sum->:",total)


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

使用道具 举报

发表于 2020-10-21 15:36:49 | 显示全部楼层
def func(maxNum):
    multiple3_list =[i for i in range(0 ,maxNum ,3)]
    multiple5_list =[i for i in range(0 ,maxNum ,5)]
    result =sum(multiple3_list) +sum(multiple5_list)
    return result

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

使用道具 举报

发表于 2020-10-21 18:23:57 | 显示全部楼层
def func(maxNum =1000):
    multiple3_list =[i for i in range(0 ,maxNum ,3)]
    multiple5_list =[i for i in range(0 ,maxNum ,5)]
    result =sum(multiple3_list) +sum(multiple5_list)
    return result

print(func())

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

使用道具 举报

发表于 2020-11-5 13:04:35 | 显示全部楼层
#include<stdio.h>
#define M 999
int main(){
        int sum;
        sum=3*((1+M/3)*(M/3))/2+5*((1+M/5)*(M/5))/2-15*((1+M/15)*(M/15))/2;
        printf("%d",sum);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2020-11-26 10:21:28 | 显示全部楼层
每天进步一点点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-26 08:54:22 | 显示全部楼层
  1. #include <stdio.h>

  2. #define NUM 1000

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

使用道具 举报

发表于 2021-1-6 14:00:29 | 显示全部楼层
number1 = 0
for number in range(1,1000):
       if number % 3 == 0 or number % 5 ==0:
              number1 = number1 + number
print(number1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-1 22:25:36 | 显示全部楼层
  1. /************************************
  2. *题目1:找出1000以下自然数中3和5的倍数之和
  3. * @JinnYang
  4. */

  5. #include <stdio.h>

  6. #define UPPER_LIMIT 1000

  7. int sum();

  8. int main(){
  9.   printf("%d\n",sum());
  10. }

  11. #define F1_SUM_SWITCH
  12. #ifdef F1_SUM_SWITCH
  13. int sum(){
  14.   int sum = 0;
  15.   for(int i = 0;i<UPPER_LIMIT;i+=3) sum+=i;
  16.   for(int i = 0;i<UPPER_LIMIT;i+=5) (i%15) && (sum+=i);
  17.   return sum;
  18. }
  19. #endif


  20. //#define F2_SUM_SWITCH
  21. #ifdef F2_SUM_SWITCH
  22. int sum(){
  23.   int sum = 0;
  24.   for(int i = 0;i<UPPER_LIMIT;i++){
  25.     if(i%3 == 0 || i%5 == 0){
  26.       sum += i;
  27.     }
  28.   }
  29.   return sum;
  30. }
  31. #endif
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-11 19:14:08 From FishC Mobile | 显示全部楼层
66(3和5的倍数),467(3或5的倍数)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-11 19:19:53 From FishC Mobile | 显示全部楼层
66(3和5的倍数),467(3或5的倍数)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-11 22:33:24 | 显示全部楼层
gongxiaobo2006 发表于 2015-4-24 14:26
把代码贴一下,看看对不对,哪位大婶有牛鼻的,希望不吝赐教阿!

i=i+1是啥意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-17 18:16:08 | 显示全部楼层
本帖最后由 李京 于 2021-2-17 18:17 编辑

方法2比方法1少循环了将近400次  而且不用判断
但是,加减上多了一百多次
我也不知道,那个效率高

还有其他方法请讲解思路

  1. #include <stdio.h>

  2. int f1(int n);//方法1
  3. int f2(int n);//方法2

  4. int f1(int n)
  5. {
  6.         int i, num = 0,cont1=0;//cont1统计num 加的次数

  7.         for (i = 1; i < n; i++)//直接遍历所有
  8.         {
  9.                 if (i % 3 == 0 || i % 5 == 0)
  10.                 {
  11.                         cont1++;
  12.                         num += i;
  13.                 }
  14.         }
  15.         printf("cont1 = %d\n", cont1);
  16.         return num;
  17. }

  18. int f2(int n)//思路  不是要判断3和5的倍数吗 直接+3和+5就行了,然后再把重复加的减掉
  19. {
  20.         int i=1, num = 0,cont=0;//cont统计加的次数

  21.         for (i = 3; i < n; i+=3)//这里是加上所有3的倍数
  22.         {
  23.                 num += i;
  24.                 cont++;
  25.         }
  26.         for (i = 5; i < n; i += 5)//这里是加上所有5的倍数
  27.         {
  28.                 num += i;
  29.                 cont++;
  30.         }

  31.         for (i = 15; i < n; i += 15)//这里是减掉重复加的数
  32.         {
  33.                 num -= i;
  34.                 cont++;
  35.         }
  36.         printf("cont = %d\n", cont);
  37.         return num;
  38. }

  39. int main(void)
  40. {
  41.         int n;
  42.         int num,num2;

  43.         scanf("%d", &n);

  44.         num = f2(n);
  45.         num2 = f1(n);

  46.         printf("%d  %d",num,num2);

  47.         return 0;
  48. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-17 22:28:16 | 显示全部楼层
李京 发表于 2021-2-17 18:16
方法2比方法1少循环了将近400次  而且不用判断
但是,加减上多了一百多次
我也不知道,那个效率高

真正快的方法是使用等差数列求和公式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-18 09:40:16 | 显示全部楼层

wo'ha

本帖最后由 李京 于 2021-2-18 10:21 编辑
永恒的蓝色梦想 发表于 2021-2-17 22:28
真正快的方法是使用等差数列求和公式


确实效率高,
  1. #include <stdio.h>

  2. int f(int n,int x);

  3. int f(int n,int x)
  4. {
  5.         int i, j, an, num;

  6.         j = (n - 1) / x;
  7.         for (i = n - 1; i > 0; i--)
  8.         {
  9.                 if (i % x == 0)
  10.                 {
  11.                         an = i;
  12.                         break;
  13.                 }
  14.         }
  15.         num = (j * (x + an) / 2);

  16.         return num;
  17. }

  18. int main(void)
  19. {
  20.         int n, num=0;

  21.         scanf("%d", &n);

  22.         num = f(n, 3) + f(n, 5);
  23.         num -= f(n, 3 * 5);

  24.         printf("%d", num);

  25.     return 0;
  26. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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