Menu
Coddy logo textTech

A solution with no loops

Coddyの「数学パズル」コースのレッスン 3/20。

前のチャレンジはループを使って簡単に解けます。しかし、もし N が大きい場合(例えば N=10**9 など)、実行時間は非常に長くなる可能性があります。

もし前のチャレンジをループを使わずに解けたなら、それは素晴らしいことです。あなたはプログラミングと数学の両方において非常に優れています。もしそうでなければ、このレッスンはあなたのためのものです。

別の方法は、各等差数列の和を直接計算することです。

初項 a1、末項 an、および項数 n がわかっている場合、その和は次のようになります:

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

challenge icon

チャレンジ

簡単

和の公式を使用して、チャレンジの解決策を計算してください。

整数 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;
}

数学パズルのすべてのレッスン

2Multiples of 3 or 5

A problemA solution with no loops

5Diophantine Equation

IntroductionA problem