不使用循环的解法
Coddy 数学谜题 课程的第 3 课,共 20 课。
之前的挑战可以很容易地用循环解决。不过,如果 N 很大,例如 N=10**9,运行时间可能会很长,非常长。
如果你在不使用循环的情况下解决了之前的挑战,那就太棒了,说明你的编程和数学都很出色。如果没有,这一课就是为你准备的。
另一种方法是直接计算等差数列的和。
如果你知道首项 a1、末项 an 和项数 n,那么总和为:
S = n * (a1+an)//2
挑战
简单使用求和公式计算这个挑战的答案。
编写一个函数 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;
}
数学谜题中的所有课
自己练习: C 在线编译器