雨如洁 发表于 2020-3-10 22:22:40

计算3 5的倍数之和

计算出 1000 以内(不包含 1000)的自然数中,属于 3 或 5 的倍数的数字之和

请问问题出在哪里啊

#include <stdio.h>
int main()
{
      int a , i=1,c = 1, b;
      long long int g,m = 0,n = 0;

                        while(a < 1000)
                {    a = 5*i;
                     i = i + 1;
                       if(a<1000)
                        {
                       m=a + m;
                       }
          }
               while(b< 1000)
                {    b = 3*c;
                     c = c + 1;
                       if(b<1000)
                        {
                          
                       n=b + n;
                       }
               }
               
                g = m +n;
            printf("%lld",g);
      return 0;
}

wp231957 发表于 2020-3-10 22:22:41

一个循环就足够了

flamezyy 发表于 2020-3-11 01:20:52

重复计算了15的倍数。比如15,算5的倍数的时候加了一次,算3的倍数的时候又加了一次

Loser_YiMo 发表于 2020-3-11 10:18:29

应该是多少,我算的不对嘛?难道不是266333?我现在都还记得这个答案,我服了,输了也进不去。

jackz007 发表于 2020-3-11 12:39:20

本帖最后由 jackz007 于 2020-3-11 14:18 编辑

      楼主肯定是重复统计了,答案应该是 233168
      要想不重复,最好在一次循环中搞定
#include <stdio.h>

main(void)
{
      int i , s                                                            ;
      for(s = 0 , i = 0 ; i < 1000 ; i ++) if(! (i % 3) || ! (i % 5)) s += i ;
      printf("%d\n" , s)                                                   ;
}
      编译、运行实况:
C:\Bin>g++ -o x x.c

C:\Bin>x
233168

C:\Bin>
      当然,也不是说不可以分两次搞定:
#include <stdio.h>

main(void)
{
      int i , s                                       ;
      for(s = 0 , i = 3 ; i < 1000 ; i += 3) s += i   ;
      for(i = 5 ; i < 1000 ; i += 5) if(i % 3) s += i ;
      printf("%d\n" , s)                              ;
}
      编译、运行情况与上面完全相同

kelr 发表于 2020-3-11 15:51:14

#include <stdio.h>
int main()
{
    int i,sum = 0;
    for (i = 0;i < 1000;i++)
    {
      if ((i % 3 == 0) || (i % 5 == 0))
      {
         
            sum += i;
      }

    }
    printf("%d",sum );
    return 0;
}

提供参考,个人建议

害羞的新手 发表于 2020-3-11 19:40:12

重复了吧,3和5的公倍数,在最后多加了

zm_selina 发表于 2020-3-11 21:43:19

本帖最后由 zm_selina 于 2020-3-11 21:46 编辑


#include <stdio.h>

int main()
{
        int sum = 0, i;
       
        for(i=1; i<1000; i++)
        {
                if((i%3==0) || (i%5==0))
                {
                        sum += i;
                }
        }
       
        printf("%d", sum);
       
        return 0;
}

3和5的公倍数算重复了,一个循环就行了。

雨如洁 发表于 2020-3-11 22:37:13

Loser_YiMo 发表于 2020-3-11 10:18
应该是多少,我算的不对嘛?难道不是266333?我现在都还记得这个答案,我服了,输了也进不去。

多了15

永恒的蓝色梦想 发表于 2020-3-12 08:24:57

Loser_YiMo 发表于 2020-3-11 10:18
应该是多少,我算的不对嘛?难道不是266333?我现在都还记得这个答案,我服了,输了也进不去。

来自PROJECT EULERAnswer:
233168
你绝对把3和5 的倍数重复算了

Loser_YiMo 发表于 2020-3-12 09:46:27

永恒的蓝色梦想 发表于 2020-3-12 08:24
来自PROJECT EULER
你绝对把3和5 的倍数重复算了

感谢!
页: [1]
查看完整版本: 计算3 5的倍数之和