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
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
Tự luyện tập: Trình biên dịch C online