erdf99
发表于 2022-11-8 18:49:21
int find3or5(int n){//找出1000以下自然数中3和5的倍数之和
int three = (n-1) / 3;
int five = (n-1) / 5;
int fifteen = (n-1) / 15;
return 3* (1 + three)* three / 2 + 5 * (1 + five) * five / 2 - 15 * (1 + fifteen) * fifteen / 2;
}
元豪
发表于 2022-11-27 07:46:29
python一行:
print(sum())
C++:
#include <iostream>
using namespace std;
int main(){
int num = 0;
for (int i = 0; i < 1000; i++){
if (i % 3 == 0 || i % 5 == 0){
num += i;
}
}
cout << num << endl;
return 0;
}
eyouyou1105
发表于 2022-11-27 22:34:13
sum()
r里鲁亚
发表于 2022-12-28 09:52:43
b = []
sum = 0
for i in range(1001):
a = len(str(i))
for k in range(a):
sum += int(str(i))
if sum % 3 == 0:
b.append(i)
sum = 0
if str(i) == '0' or str(i) == '5' :
b.append(i)
for i in range(len(b)-1):
if b.count(b) != 1:
b=0
sum = 0
for i in b:
sum += i
if i == 1000:
print(sum)
KeyError
发表于 2023-1-13 14:04:12
267,333
未泯
发表于 2023-4-6 10:27:19
add=0
for each in range(1000//3+1):
add+=3*each
if 5*each<1000 and each%3!=0:
add+=5*each
叶落了
发表于 2023-6-9 13:14:15
int main(void)
{
int i,j,l;
int s=0;
for(i=3;i<=1000;i=i+3)
{
s=s+i;
}
for(j=5;j<=1000;j=j+5)
{
s=s+j;
}
for(l=15;l<=1000;l=l+15)
{
s=s-l;
}
printf("1000 以下的自然数中,属于 3 或 5 的倍数的数字之和为%d",s);
return 0;
}
//满足x+y+1<=xy即可,就可以减少次数
funcE
发表于 2024-6-3 23:48:29
#include<iostream>
#define RANGE 1000
using namespace std;
//枚举算法 1
int enumeration_1(int range);
//枚举算法2
int enumeration_2(int range);
//公式算法
int formula(int range);
int main(){
//分别输出由三种算法得到的结果
cout << "enumeration_1:" << enumeration_1(RANGE) << endl;
cout << "enumeration_2:" << enumeration_2(RANGE) << endl;
cout << "formula:" << formula(RANGE) << endl;
return 0;
}
int enumeration_1(int range){
int sum=0;
//枚举出范围内所有自然数,判断是否为
//3或者5的倍数,如果满足则累加进sum变量
//时间复杂度为 O(n)
for(int i=1;i<range;i++){
sum += i%3==0 || i%5==0 ? i : 0;
}
return sum;
}
int enumeration_2(int range){
int sum=0;
//从0开始每次增加3必为3的倍数,无需判断直接累加进sum变量
for(int i=0;i<range;i+=3) sum+=i;
//同理,从0开始每次增加5必为5的倍数,但是要忽略掉那些同为
//3的倍数
//时间复杂度同为 O(n) 但对比枚举1有所减少
for(int i=0;i<range;i+=5){
sum += i%3==0 ? 0 : i;
}
return sum;
}
int formula(int range){
int sum=0;
//使用等差数列求和公式 (begin + end) * count / 2
//分别求出3和5的倍数和累加进sum变量
//时间复杂度为 O(1)
sum += ((range-range%3)+3) * ((range-range%3)/3) / 2;
sum += ((range-range%5)+5) * ((range-range%5)/5) / 2;
//3和5的公倍数,也就是15的倍数被重复累加,所以要减去
sum -=((range-range%15)+15) * ((range-range%15)/15) / 2;
//因为题目表示为范围内,所以如果范围的数字正好是3或者5的倍数
//需要将范围数字本身减去
sum -= range%3==0 || range%5==0 ? range : 0;
return sum;
}
输出:
enumeration_1:233168
enumeration_2:233168
formula:233168
--------------------------------
Process exited after 0.01357 seconds with return value 0
请按任意键继续. . .
Ian_Li
发表于 2024-9-5 12:56:41
C++练习打卡 Day1:
#include <iostream>
int main(void) {
int sum = 0;
for (int i = 1; i < 1000; i++) {
if (i % 3 == 0 || i % 5 == 0) {
sum += i;
}
}
std::cout << "1000以下自然数中3和5的倍数之和为:" << sum << std::endl;
}
hqk770
发表于 2024-12-8 22:59:02
本帖最后由 hqk770 于 2024-12-8 23:31 编辑
#include <stdio.h>
int k = 0; //控制换行输出
int h = 0; //记录行号
int n = 0; //记录循环的次数
void put(int i)
{
if (!(k % 10))
{
h++;
printf("\n%d:\t", h);
}
k++;
printf("%d\t", i);
}
void main()
{
int sum = 0;
int i = 3;
int j = 5;
while (i < 1000) {
while (j <i)
{
if (j % 3)
{
sum += j;
put(j);
}
j += 5;
n++;
}
put(i);
n++;
sum += i;
i += 3;
}
printf("\n\n1000以内自然数中,3和5的所有倍数之和:%d\n",sum);
printf("共循环%d次\n\n", n);
}
xiaosi4081
发表于 6 天前
直接容斥+等差即可:
#include<bits/stdc++.h>
using namespace std;
int n;
int f(int x){
if(x > n) return 0;
return (x+n/x*x)*(n/x)/2;
}
int main(){
cin >> n; --n;
int res = f(3)+f(5)-f(15);
cout << res << endl;
return 0;
}
页:
4
5
6
7
8
9
10
11
12
13
[14]