A solution with no loops
Coddyの「数学パズル」コースのレッスン 3/20。
前のチャレンジはループを使って簡単に解けます。しかし、もし N が大きい場合(例えば N=10**9 など)、実行時間は非常に長くなる可能性があります。
もし前のチャレンジをループを使わずに解けたなら、それは素晴らしいことです。あなたはプログラミングと数学の両方において非常に優れています。もしそうでなければ、このレッスンはあなたのためのものです。
別の方法は、各等差数列の和を直接計算することです。
初項 a1、末項 an、および項数 n がわかっている場合、その和は次のようになります:
S = n * (a1+an)//2
チャレンジ
簡単和の公式を使用して、チャレンジの解決策を計算してください。
整数 N を入力として受け取り、N 未満の 3 または 5 の倍数の和を返す関数 calc を作成してください。
例えば、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;
}