鱼C论坛

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

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

  [复制链接]
发表于 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 | 显示全部楼层
#include <stdio.h>

#define NUM 1000

int main ()
{
        int sum = 0;
        for (int i = 1; i < NUM; i++)
        {
                if (i % 3 == 0 || i % 5 == 0)
                {
                        sum += i; 
                }
        }
        printf("%d", sum);
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> 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:找出1000以下自然数中3和5的倍数之和
 * @JinnYang
 */

#include <stdio.h>

#define UPPER_LIMIT 1000

int sum();

int main(){
  printf("%d\n",sum());
}

#define F1_SUM_SWITCH
#ifdef F1_SUM_SWITCH
int sum(){
  int sum = 0;
  for(int i = 0;i<UPPER_LIMIT;i+=3) sum+=i;
  for(int i = 0;i<UPPER_LIMIT;i+=5) (i%15) && (sum+=i);
  return sum;
}
#endif


//#define F2_SUM_SWITCH
#ifdef F2_SUM_SWITCH
int sum(){
  int sum = 0;
  for(int i = 0;i<UPPER_LIMIT;i++){
    if(i%3 == 0 || i%5 == 0){
      sum += i;
    }
  }
  return sum;
}
#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次  而且不用判断
但是,加减上多了一百多次
我也不知道,那个效率高

还有其他方法请讲解思路
#include <stdio.h>

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

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

        for (i = 1; i < n; i++)//直接遍历所有
        {
                if (i % 3 == 0 || i % 5 == 0)
                {
                        cont1++;
                        num += i;
                }
        }
        printf("cont1 = %d\n", cont1);
        return num;
}

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

        for (i = 3; i < n; i+=3)//这里是加上所有3的倍数
        {
                num += i;
                cont++;
        }
        for (i = 5; i < n; i += 5)//这里是加上所有5的倍数
        {
                num += i;
                cont++;
        }

        for (i = 15; i < n; i += 15)//这里是减掉重复加的数
        {
                num -= i;
                cont++;
        }
        printf("cont = %d\n", cont);
        return num;
}

int main(void)
{
        int n;
        int num,num2;

        scanf("%d", &n);

        num = f2(n);
        num2 = f1(n);

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

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> 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
真正快的方法是使用等差数列求和公式


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

int f(int n,int x);

int f(int n,int x)
{
        int i, j, an, num;

        j = (n - 1) / x;
        for (i = n - 1; i > 0; i--)
        {
                if (i % x == 0)
                {
                        an = i;
                        break;
                }
        }
        num = (j * (x + an) / 2);

        return num;
}

int main(void)
{
        int n, num=0;

        scanf("%d", &n);

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

        printf("%d", num);

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

使用道具 举报

发表于 2021-3-6 16:20:57 | 显示全部楼层
gongxiaobo2006 发表于 2015-4-24 14:25
我的结果是233168!哈哈哈哈哈

1000以下的啊,应该是233168
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-8 21:10:49 | 显示全部楼层
#include <stdio.h>

#define max 1000

int main()
{
        int sum = 0;
        for( int i = 1; i < max; i++ )
        {
                if( i%3 == 0 || i%5 == 0)
                {
                        sum += i;
                }
        }

        printf("%d\n",sum);

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

使用道具 举报

发表于 2021-3-14 14:57:57 | 显示全部楼层
// 解题思路: 假设找20以内3和5的倍数之和 --- 3,6,9,12,15,18 + 5,10,15 - 15
// 就是将3的倍数相加,将5的倍数相加,在减去3*5的倍数
// 3的倍数之和 = 3*(1+2+3+4+5+6), 而20/3 = 6
// 所以只需要写一个n以内m的倍数之和的方法即可(n > m)
#include <stdio.h>

int add_multiple(int n, int m)
{
    int max_factor;
    int sum;
    if (n > m)
    {
        max_factor = n/m;
        sum = m * (1+max_factor)*max_factor/2;
        return sum;
    }else{
        return 0;
    }
}

int main()
{
    printf("1000之内3和5的倍数之和为 %d\n\n", add_multiple(1000,3)+add_multiple(1000,5)-add_multiple(1000,15));
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-26 18:22:40 | 显示全部楼层
本帖最后由 hjg 于 2021-3-26 18:25 编辑

你知道??有个人叫高斯。没错就是那个小时候 1+2+...+100的那个大神,然后还有一个数列叫等差数列,有两个公式 通项公式 && 求和公式  凉了,中学白上了。。。。

                               
登录/注册后可看大图

结果正确,忘了这是欧拉计划就不好了。要学好数学。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-26 18:26:46 | 显示全部楼层
hjg 发表于 2021-3-26 18:22
你知道??有个人叫高斯。没错就是那个小时候 1+2+...+100的那个大神,然后还有一个数列叫等差数列,有两个 ...

觉得可以的话点下支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-31 19:44:54 | 显示全部楼层
int main(int argc, char *argv[]) {
        int a,i;
        int sum=0;
        printf("请输入一个大于3的整数:");
        scanf("%d",&a);
        for(i=1;i<=a;i++){
                if (i%3==0 || i%5==0){
                        sum=sum+i;
                }
        }
        printf("结果为:%d",sum);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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