Đề bài
Tìm tổng các phần tử là số chính phương (perfect square) trong mảng, dùng con trỏ.
Ví dụ
Mảng: 1, 2, 3, 4, 5, 9, 10, 11, 16 → Chính phương: 1, 4, 9, 16 → Tổng = 30
Thuật toán
- Cấp phát mảng động.
- Duyệt mảng bằng con trỏ
*(a+i). - Kiểm tra
sqrt(*(a+i))có phải số nguyên không. - Cộng dồn vào tổng.
Chương trình C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int sumPositive(int n, int *a) {
int i, sum = 0, m;
for (i = 0; i < n; i++) {
m = sqrt(*(a+i));
if (pow(m, 2) == *(a+i))
sum += *(a+i);
}
return sum;
}
int main() {
int i, *a, n;
printf("Kích thước mảng: "); scanf("%d", &n);
a = (int*)malloc(n * sizeof(int));
printf("Nhập phần tử:\n");
for (i = 0; i < n; i++) scanf("%d", a+i);
printf("Tổng các số chính phương: %d", sumPositive(n, a));
return 0;
}
Kết quả
Kích thước mảng: 10 Phần tử: 1 2 3 4 5 6 7 8 9 10 Tổng các số chính phương: 14