Menu
CoddyTech

不使用循环的解法

Coddy 数学谜题 课程的第 3 课,共 20 课。

之前的挑战可以很容易地用循环解决。不过,如果 N 很大,例如 N=10**9,运行时间可能会很长,非常长。

如果你在不使用循环的情况下解决了之前的挑战,那就太棒了,说明你的编程和数学都很出色。如果没有,这一课就是为你准备的。

另一种方法是直接计算等差数列的和。

如果你知道首项 a1、末项 an 和项数 n,那么总和为:

S = n * (a1+an)//2

challenge icon

挑战

简单

使用求和公式计算这个挑战的答案。

编写一个函数 calc,它接收整数 N 作为输入,并返回小于 N 的 3 或 5 的倍数之和。

例如,当 N=10 时,函数会返回 23

提示:把代码拆分成较小的函数。

亲手试试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "solution.h"

int main() {
    int n;
    if (scanf("%d", &n) != 1) n = 0;
    int r = calc(n);
    printf("%d\n", r);
    return 0;
}

数学谜题中的所有课

23 或 5 的倍数

一个问题不使用循环的解法

5丢番图方程

简介一个问题

自己练习: C 在线编译器