Cho mảng, tìm tất cả bộ 3 phần tử (triplet) có tổng ≤ k.
Ví dụ
Mảng: {1, 2, 3, 8, 5, 4}, k = 10
Kết quả: {1,2,3} {1,2,5} {1,2,4} {1,3,5} {1,3,4} {1,5,4} {2,3,5} {2,3,4}
Thuật toán
3 vòng lồng: i từ 0 đến n-3, j từ i+1 đến n-2, k từ j+1 đến n-1. Kiểm tra tổng ≤ k.
Chương trình
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 8, 5, 4};
int sum = 10;
int size = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < size - 2; i++)
for (int j = i + 1; j < size - 1; j++)
for (int k = j + 1; k < size; k++)
if (arr[i] + arr[j] + arr[k] <= sum)
printf("{%d, %d, %d}\n", arr[i], arr[j], arr[k]);
return 0;
}
Kết quả
{1, 2, 3}
{1, 2, 5}
{1, 2, 4}
{1, 3, 5}
{1, 3, 4}
{1, 5, 4}
{2, 3, 5}
{2, 3, 4}