Hàm liệt kê số hoàn hảo có trong 1 khoảng [A,B]
void lietke(int a, int b) { for (int i = a; i <= b; i++) if (KTSHH(i) == 1) printf("%5d", i); }
Gọi hàm
#include<stdio.h> #include<conio.h> #include<math.h> void lietke(int a, int b); void main() { int a, b; printf("Nhap a: "); scanf("%d", &a); printf("\nNhap b: "); scanf("%d", &b); printf("Cac so hoa hao trong khoang %d den %d la:\n", a, b); lietke(a, b); getch(); }
Kết quả
Nhap a: 1
Nhap b: 300
Cac so hoa hao trong khoang 1 den 300 la:
6 28
Ví dụ 3: Tìm tất cả các số hoàn hảo của mảng 1 chiều và xuất ra màn hình.
Thuật toán: Cho i chạy từ đầu mảng đến cuối mảng, kiểm tra tất cả các giá trị trong mảng với hàm kiểm tra số hoàn hảo, nếu thành phần nào thỏa thì xuất ra màn hình.
Để thao tác được trên mảng 1 chiều các bạn phải tạo ra được một mảng 1 chiều. Các bạn có thể xem thêm về mảng 1 chiều tại đây.
Code C/C++
Tạo và xuất mảng 1 chiều:
//Tạo mảng: void NhapMang1C(int a[], int &n) { do { printf("Nhap so phan tu mang: "); scanf("%d", &n); } while (n<1); for (int i = 0; i<n; i++) { printf("Nhap phan tu a[%d] : ", i); scanf("%d", &a[i]); } } //Xuất mảng void XuatMang1C(int a[], int n) { for (int i = 0; i<n; i++) printf("%4d", a[i]); }
Xuất các số hoàn hảo của mảng:
void LietKeMang(int a[], int n) { for (int i = 0; i < n;i++) if (KTSHH(a[i])==1) // gọi hàm kiểm tra số hoàn hảo printf("%5d", a[i]); }
Hàm main:
#include<stdio.h> #include<conio.h> #include<math.h> void lietke(int a, int b); void NhapMang1C(int a[], int &n); void XuatMang1C(int a[], int n); void LietKeMang(int a[], int n); void main() { int A[1000]; int N; NhapMang1C(A, N); printf("Noi dung cua mang la: \n"); XuatMang1C(A, N); printf("\nCac so hoan hao co trong mang la: \n"); LietKeMang(A, N); getch(); }
Kết quả:(Xem tiếp ở trang sau)
cho mình cách tìm số hoàn hảo của dãy số (1+2+…+20=210) khi mình biết số tổng là 210 thì mình muốn biết các số được cộng lại có phải từ 1 đến 20 không?
6 cũng là ước của 6