Menu
CoddyTech

Lời giải không dùng vòng lặp

Bài học 3 trên 20 trong khóa học Câu đố toán học của Coddy.

Thử thách trước có thể giải dễ dàng bằng vòng lặp. Tuy nhiên, nếu N lớn, chẳng hạn N=10**9, thời gian chạy có thể rất lâu, thậm chí cực kỳ lâu.

Nếu bạn giải thử thách trước mà không dùng vòng lặp thì thật tuyệt, bạn rất giỏi cả lập trình lẫn toán học. Nếu chưa làm được, bài học này dành cho bạn.

Một cách khác là tính trực tiếp tổng của cấp số cộng.

Nếu bạn biết số hạng đầu tiên, a1, số hạng cuối cùng, an, và số lượng số hạng, n, thì tổng là:

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

challenge icon

Thử thách

Dễ

Dùng công thức tính tổng để tìm lời giải cho thử thách.

Viết một hàm (function) calc nhận số nguyên N làm đầu vào và trả về tổng các bội số của 3 hoặc 5 nhỏ hơn N.

Ví dụ, với N=10, hàm sẽ trả về 23.

Gợi ý: Chia code thành các hàm nhỏ hơn.

Tự làm thử

#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;
}

Tất cả bài học trong Câu đố toán học

2Bội số của 3 hoặc 5

Một bài toánLời giải không dùng vòng lặp

5Phương trình Diophantine

Giới thiệuMột bài toán

Tự luyện tập: Trình biên dịch C online