我的想法是这样的,但是不知道错在哪里,答案和暴力相加得出来的答案不一样,希望有小伙伴可以帮我看看我到底钻到哪个牛角尖里去了{:10_266:}{:10_266:}#include <stdio.h>
#include <stdlib.h>
int main(){
int s,s3,s5;
int n5=999/5,n3=999/3;//分别得出1000一下共有几个倍数
s3=((n3*3)+((n3*(n3-1))/2))*3;//等差数列求和公式
s5=((n5*5)+((n5*(n5-1))/2))*5;
s=s3+s5;//将3的倍数和5的倍数相加
printf("%d\n",s);
}
爱因斯坦程序员 发表于 2019-7-24 11:02
我的想法是这样的,但是不知道错在哪里,答案和暴力相加得出来的答案不一样,希望有小伙伴可以帮我看看我到 ...
3和5的倍数有重叠部分
永恒的蓝色梦想 发表于 2019-7-24 15:28
3和5的倍数有重叠部分
就是说要把三和五重叠的部分扣出来才对,对吧!!{:10_297:}
爱因斯坦程序员 发表于 2019-8-1 16:18
就是说要把三和五重叠的部分扣出来才对,对吧!!
是的
永恒的蓝色梦想 发表于 2019-8-1 16:31
是的
哈哈 谢谢这位兄台{:10_298:}
爱因斯坦程序员 发表于 2019-8-1 18:41
哈哈 谢谢这位兄台
感谢支持!{:10_257:}
#include <stdio.h>
int main()
{
unsigned long long int sum = 0;
for (int i = 0; i < 1000; i++)
{
if (i % 3 == 0 || i % 5 == 0)
{
sum += i;
}
}
printf("1000以下的自然数中,属于3和5的倍数的数字之和为%d", sum);
return 0;
}
lst =
print(sum(lst))
233168
import tkinter as tk
x = 0
for i in range(1,1001):
if i % 3 == 0 or i % 5 == 0:
x += i
r = tk.Tk()
tk.Label(r,text = x).pack()
r.mainloop()
233159
#include<stdio.h>
void main(){
//1、3的倍数和5的倍数;
//如果我们列出10以内所有3或5的倍数,我们将得到3、5、6和9,这些数的和是23。
//求1000以内所有3或5的倍数的和。
int i,sum=0;
for(i=0;i<1000;i++){//1000以内所有整数
if(i%3==0||i%5==0){//如果能整除3或5,说明是3或5的倍数
sum+=i;//把这些数累加起来求出它们的和
}
}
printf("sum=%d\n", sum);
}
总结方法有:
1. 暴力法: 从 1 直到 MAX 去试,符合的累加,循环1000次
2. 优化暴力法: 减少循环的次数,例如2次循环的跳距用 3 和 5 来跳,1000/3+1000/5次
3. 公式法: 直接公式套出结果,(最大+最小) * (符合数/2) 得出综合,但出现符个数为单个数的情况,要扣除。最后注意要消除a*b产生的重复
#include <stdio.h>
#define MAX 1000
unsigned int F(unsigned int x);
int main(int argc, char **argv){
unsigned int a , b , cont=0;
scanf("%d %d",&a,&b);
cont+=F(a);
cont+=F(b);
cont-=F(a*b);
printf("%u\n",cont);
return 0;
}
unsigned int F(unsigned int x){
unsigned int tmp , cont = 0;
tmp=(MAX-1)/x;
cont += tmp/2 * (x + tmp*x);
if((tmp%2) == 1){cont+=(x + tmp*x)/2;};
return cont;
}
题目不难,应该是为了照顾新手,代码如下:
list1 =
list2 = []
for num in list1 :
if num % 3 == 0 or num % 5 == 0 :
list2.append(num)
print(sum(list2))
结果为:234168
print(sum(
set(+)
))
本帖最后由 傻狍子嗷 于 2019-12-2 17:51 编辑
#include<stdio.h>
int main()
{
int sum = 0;
int i;
for (i = 1; i <= 1000; i++)
{
if ((!(i % 3) || !(i % 5)) && !((i % 3) && (i % 5)))
{
sum += i;
}
}
printf("结果是 %d", sum);
return 0;
}
结果是 234168
int Multiples_3and5(int mixnum)
{
int sum=0;
for(int i=1;i<mixnum;i++)
{
if( ((i%3)==0) || ((i%5)==0) )
{
sum += i;
}
}
return sum;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
int sum = 0;
for(int i = 1 ; i<= 1000; i++){
if(i%3 == 0 ||i%5 ==0){
sum+=i;
}
}
printf("finaly sum is :%d\n",sum);
}
total = 0
for i in range(1000):
if i % 3==0 ori % 5==0:
total += i
print(total)
瞬秒爆加速 发表于 2015-4-26 11:16
小甲鱼可以将每种语言的版本都选出来么
#include<stdio.h>
int main(void)
{
int i,sum=0;
for(i=0;i<1000;i++)
{
if(i%3==0||i%5==0)
sum = sum + i;
}
printf("%d",sum);
}