鱼C论坛

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

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

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

1000以下的啊,应该是233168
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

                               
登录/注册后可看大图

结果正确,忘了这是欧拉计划就不好了。要学好数学。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

觉得可以的话点下支持
小甲鱼最新课程 -> https://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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-4 22:12:41 | 显示全部楼层
aalittlefish 发表于 2021-3-14 14:57
// 解题思路: 假设找20以内3和5的倍数之和 --- 3,6,9,12,15,18 + 5,10,15 - 15
// 就是将3的倍数相加,将 ...

想法不错,可以看一下楼下。简单计算时间复杂度可为1,空间复杂度也可以换为常数(即内存可以极大节省)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-20 04:34:12 | 显示全部楼层
本帖最后由 手残待拯救 于 2021-4-20 05:32 编辑

这里可能出现的问题:
1.重复计算3和5的公共倍数
2.代码与思维不符合
解决方案:
写下你的需求。
无法一步完成需求时,拆解你的需求,直到他的每一块构造都能被一步完成。(有时只是经验不够,或者方法不够多)
检查你的拆解
用代码分步完成你你的需求
优化代码
1.需求:求出1000以内,3和5的倍数的和
2.拆解:1.数列1000,2。满足3的倍数或者5的倍数。
3.检查:求和
4.代码:
a = sum(x for x in range(1000) if not x % 3 or not x % 5)
print(a)
当然这里直接给出的是优化后的代码
最后a = 233168
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-22 17:08:46 | 显示全部楼层
#题目1:找出1000以下自然数中3和5的倍数之和
sum1 = 0
for i in range(1000):
    if i/3 - i//3 == 0 or i/5 - i//5 ==0:
        sum1 += i
print(sum1)[/code]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-2 19:58:11 | 显示全部楼层
  1. sum =0
  2. for dev in range(1,1000):
  3.     if( dev % 3 == 0) or (dev % 5 == 0):
  4.         sum += i
  5.     dev += 1
  6. print(sum)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-20 15:43:48 | 显示全部楼层
sum = 0
for i in range(1,1000):
    if i / 3 == i // 3:
        sum += i
    elif i / 5 == i // 5:
        sum += i
print(sum)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-9 14:43:25 | 显示全部楼层
  1. a = 0  
  2. for i in range(1,1000):
  3.     if i % 3 == 0 or i % 5 == 0:
  4.         a = a + i
  5. print(a)
复制代码


答案是233168
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-23 20:40:23 | 显示全部楼层
gongxiaobo2006 发表于 2015-4-24 14:25
我的结果是233168!哈哈哈哈哈
  1.         long sum = 0;
  2.         int swp;

  3.         swp = 3;
  4.         while (1)
  5.         {
  6.                 if (swp < 1000)
  7.                 {
  8.                         sum += swp;
  9.                         swp += 3;
  10.                 }
  11.                 else
  12.                 {
  13.                         break;
  14.                 }
  15.         }

  16.         swp = 5;
  17.         while (1)
  18.         {
  19.                 if (swp < 1000)
  20.                 {
  21.                         sum += swp;
  22.                         swp += 5;
  23.                 }
  24.                 else
  25.                 {
  26.                         break;
  27.                 }
  28.         }
复制代码

我是266333
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-10 03:57:49 | 显示全部楼层
#include <stdio.h>
#define N 1000
void main()
{
        int i,sum=0;
        for(i=3;i<N;i+=3){
                sum+=i;
        }
        for(i=5;i<N;i+=5)
                if((i%3)!=0){
                sum+=i;
        }
        printf("%d",sum);
}
运行结果233168
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-19 13:33:49 | 显示全部楼层
本帖最后由 我叫武炜昊 于 2021-8-19 13:35 编辑


不至于吧,6行不就行行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-29 14:14:45 | 显示全部楼层
  1. sum = 0

  2. for i in range(0,1000):
  3.     if i % 3 == 0 or i % 5 == 0:
  4.         sum += i
  5. print(sum)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-1 12:49:02 | 显示全部楼层
#include <iostream>
using namespace std;
int main()
{
        float sum=0;
        for(int a=1,b,c;a<1000;a++)
        {
                if(a%3==0||a%5==0)
                sum=sum+a;
        }
        cout<<sum;
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 19:11:00 | 显示全部楼层
# Multiples of 3 and 5
sum = 0
for i in range(1000):
    if (i % 3 == 0) or (i % 5 == 0):
        sum += i   
print(sum)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-25 16:14:26 | 显示全部楼层
  1. #include<stdio.h>

  2. int main(void)
  3. {
  4.   unsigned int sum = 3;
  5.   for(int i = 5;i<1000;i++)
  6.   {
  7.      if((i%3 ==0) || (i % 5 ==0))
  8.      {
  9.         sum += i;
  10.       }
  11.   }
  12.   printf("%d",sum);
  13.   
  14.   return 0;
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-7 17:00:52 | 显示全部楼层
#include<stdio.h>
int main()
{
int sum;
int y,t,x;
scanf("%d %d",&y,&t);
for(int i=0;i<1000;i++)
{
sum=i%y==0?i:i%t==0?i:0;
x+=sum;
}
printf("%d",x);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-4 09:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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