shanczp
发表于 2018-10-9 18:32:35
输出结果233168
int main(void)
{
int sum=0;
for (int i = 0; i <1000; i++)
{
if(i%3==0||i%5==0)
{
sum+=i;
}
}
printf("%d",sum);
system("pause");
return 0;
}
比特阿尔法
发表于 2018-11-1 00:45:34
#include <stdio.h>
int main()
{
int i=3;
int j=5;
int temp1=0;
int temp2=0;
int temp3=0;
float sum=0;
temp1=1000/3;
temp2=1000/5;
temp3=1000/15;
sum=(3+temp1)*(temp1/3)*0.5+(5+temp2)*(temp2/5)*0.5;
temp3=(15+temp3)*(temp3/15)*0.5;
sum-=temp3;
printf("%f",sum);
return 0;
}
算法复杂度 O(1)
运行结果为:22586
AndreaPWJ
发表于 2018-11-10 13:37:25
请问这个系列的题目会不会公布答案?还是要自己上其他地方查找资料?
因为看到下面的鱼油们答案各不相同,如果没有最后的比较值得参考的范本,个人感觉效果会打很大折扣呢。。
cupbbboom
发表于 2018-11-11 13:08:24
所以答案究竟是多少?我算的234168肯定是不对了,3和5 的公倍数我只加了一遍,题目是3倍数 + 5倍数,我少加了一个公倍数,果然不能看着字数少就少想些,不然肯定会丢数字,唉{:5_104:}
cupbbboom
发表于 2018-11-11 13:10:10
AndreaPWJ 发表于 2018-11-10 13:37
请问这个系列的题目会不会公布答案?还是要自己上其他地方查找资料?
因为看到下面的鱼油们答案各不相同 ...
主要审题没到位,看我答案就晓得了,自己可以再算遍
小屁孩2
发表于 2018-11-12 19:36:56
#include<stdio.h>
int main()
{
int a,s=0;
for(a=0;a<1000&&a>=0;a++)
{
if(a%3==0||a%5==0)
s+=a;
}
printf("%d",s);
return 0;
}
cclovepython
发表于 2018-11-24 14:36:10
sum()
11TEN
发表于 2018-11-24 14:39:17
#include<stdio.h>
int main(void)
{
int i,s=0;
for(i=1;i<=1000;i++)
{
if(i%3==0||i%5==0)
{
s+=i;
}
}
printf("%d",s);
}
233168
Stubborn
发表于 2018-12-6 03:09:11
本帖最后由 Stubborn 于 2018-12-6 03:11 编辑
list=[]
for i in range(3,1000):
if i%3 == 0 or i%5 == 0:
list.append(i)
else:
continue
print(sum(list))
sum(i for i in range(3,1000) if i%3 == 0 or i%5 == 0)
233168
python6
发表于 2018-12-18 21:02:50
翅膀团 发表于 2015-6-29 15:19
我的答案是233168。
C语言:
#include
234168 因为还有一个1000
PYthofreeze
发表于 2018-12-19 18:08:52
sum = 0
for i in range(1000):
if i%3==0 and i%5==0
sum += i
黑色的小白
发表于 2019-1-7 19:26:45
def sum_(num):
ret = 0
for i in range(num):
if i % 5 == 0 or i % 3 == 0:
ret += i
# print(i)
return ret
print(sum_(int(1001))) # ret = 234168
爱学习的喵
发表于 2019-1-8 16:04:55
def fun1(num):
return (6+(num//3-1)*3)*(num//3)//2 + (10+(num//5-1)*5)*(num//5)//2 - (30+(num//15-1)*15)*(num//15)//2
print(fun1(1000))
xzak888
发表于 2019-1-14 17:27:18
num=[]
for i in range(1000):
if i%3==0 or i%5==0:
num.append(i)
print(sum(num))
用for循环遍历,这样也不会重复计入15的倍数
gy1997
发表于 2019-1-24 16:57:30
1
zhaoming
发表于 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;
}
CodeSong
发表于 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)
LJYUYU
发表于 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
何小胖胖
发表于 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左右
孟大大
发表于 2019-2-20 09:46:26
sum = 0
for i in range(1,1000):
if i % 3 == 0 or i % 5 == 0:
sum = sum+i
i += 1
print(sum)
页:
1
2
3
4
5
6
7
[8]
9
10
11
12
13
14