Chuyển tới nội dung

Kiểm tra số chính phương trong C/C++ – Check Square number

thuat toan kiem tra so chnh phuong

Thuật toán kiểm tra số chính phương trong C/C++. Cách in ra màn hình số chính phương trong mảng một chiều, tính trung bình các

1. Số chính phương là gì?

Để hiểu được bài toán, trước hết chúng ta cần hiểu số chính phương là gì?

Số chính phương hay còn gọi là square number: Là số nguyên dương có căn bậc 2 là một số nguyên, bạn có thể hiểu SCP là bình phương của một số nguyên nào đó.
Ví dụ các số: 1, 4, 9, 16, 25 . . .

Tính chất: Số lượng các điểm tương đương với số đó đó có thể xếp thành một hình vuông. Đây chính là lý do vì sao người ta gọi nó là square number.

so chinh phuong trong c++

Một số dạng bài tập liên quan đến số chính phương:
Tìm số chính phương trong mảng C, liệt kê các số chính phương nhỏ hơn n, tìm số chính phương lớn nhất. Tính tổng các scp trong mảng một chiều.

Có thể bạn quan tâm tới các bài viết về lập trình C/C++ của mình khác!

Một bài viết chia sẻ về liệt kê các SCP nhỏ hơn N

2. Thuật toán kiểm tra số chính phương

Có hai cách để kiểm tra số chính phương, hai cách này có nội dung ý tưởng thuật toán cụ thể như sau:

Cách 1: Sử dụng vòng lặp for chạy từ i=1 tới khi i*i >n thì dừng. Nếu i*i = n thì tức là n là số chính phương. Nếu không có giá trị i nào thỏa mãn thì n không phải số chính phương.

Cách 2: Sử dụng hàm tính căn bậc e sqrt() trong thư viện math. Bạn khai báo biến nguyên i = sqrt(n). Nếu i*i = n thì tức là n là số chính phương.
Giải thích: i = sqrt(n) sẽ là một số nguyên. Nếu n không phải là số chính phương thì sqrt của nó sẽ bị làm tròn thành số nguyên vậy sau đó bình phương i sẽ là một số khác n.

Nếu như n < 1 thì n sẽ không phải là số chính phương. Điều kiện này sẽ giúp code của bạn hoàn chỉnh hơn.

3. Code hàm kiểm tra số chính phương C/C++

Bạn có thể xây dựng thành hàm kiểm tra số chính phương để dễ sử dụng trong các bài toán một cách dễ dàng nhất. Dựa vào ý tưởng mình đưa ra ở trên. Mình sẽ code thành hàm kiểm tra như sau:

Cách 1: Ở đây mình viết hàm kiểu bool (hàm trả về kiểu đúng, sai) và áp dụng đúng tư tưởng của cách 1 ở bên trên.

// Hàm kiểm tra số chính phương

bool isSquareNumber(int a){
	if(a<1)   // trường hợp < 1 => không phải số cp
		return false;
	int i=1;
	while(i*i<=a){
		if(i*i==a)   // a là số chính phương
			return true; // khi return sẽ break vòng while
		i++;
		}
	return false;   // Duyệt hết vòng while không có giá trị thỏa mãn => false
}

Cách 2: Sử dụng hàm sqrt() tuy nhiên bạn phải khai báo thư viện math

// Khai báo thư viện math: include<math.h>

bool checkSquareNumber(int n){
	if(n<1)
		return false;
	int i = sqrt(n);
	if(i*i==n)
		return true;
	return false; // nếu không là scp return false
}

4. Tìm số chính phương trong mảng một chiều

Có rất nhiều bài toán xoay quanh chủ để SCP này. Hôm nay mình sẽ giải quyết bài toán in ra tất cả các số chính phương trong mảng một chiều có n phần tử nhé.

Cách làm rất đơn giản. Mình sẽ duyệt mảng, sau đó kiểm tra từng phần tử sử dụng hàm đã code ở bên trên. Nếu thỏa mãn thĩ sẽ in ra mành hình là oki!

Code C/C++:

// code by duongdinh24.com
//github: https://github.com/duongdinh24/

#include<iostream>
#include<math.h>
using namespace std;

// Hàm kiểm tra SCP cách 1
bool isSquareNumber(int a){
	if(a<1)
		return false;
	int i=1;
	while(i*i<=a){
		if(i*i==a)
			return true;
		i++;
		}
	return false;
}

// Hàm kiểm tra SCP cách 2
bool checkSquareNumber(int n){
	if(n<1)
		return false;
	int i = sqrt(n);
	if(i*i==n)
		return true;
	return false;
}

// Ham in ra cac so chinh phuong trong mang
void printSquareNumber(int a[], int n){
	cout<<"Cac so chinh phuong trong mang: \n";
	for(int i=0;i<n;i++)
		if(checkSquareNumber(a[i]))
			cout<<" "<<a[i];
}

int main(){
	int n;
	// Nhap so luong phan tu mang
	do{
		cout<<"Nhap n: ";
		cin>>n;
	}
	while(n<=0);
	
	int a[n]; // Khai bao mang a co n phan tu
	
	cout<<"Nhap mang: "<<endl;
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	
	printSquareNumber(a,n);
	return 0;
}

Kết quả của chạy chương trình trên:

kiem tra so chinh phuong trong c

Ở trong ví dụ này các số 1, 4 và 25 là số chính phương.

Ok, bài viết của mình đến đây là hết rồi, cảm ơn bạn đã quan tâm bài viết nhé!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *