Số hoàn hảo là gì? một số bài toán tìm số hoàn hảo

2

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)

2 COMMENTS