Tìm số chính phương trong mảng C++ | Laptrinhcanban.com

HOME › >>

Tìm số chính phương trong mảng C++

Hướng dẫn cách tìm số chính phương trong mảng C++. Bạn sẽ học được cách tìm và đếm số chính phương trong mảng C++, cách tìm số chính phương đầu tiên và cuối cùng có trong mảng, cách tìm số chính phương lớn nhất và nhỏ nhất trong mảng C++ cũng như thực hiện các phép toán như tính tổng hoặc tính trung bình cộng của các số chính phương trong mảng C++ sau bài học này.

Tìm và đếm số chính phương trong mảng C++

Để tìm và đếm số chính phương trong mảng C++, chúng ta cần phải kiểm tra từng phần tử trong mảng có phải là số chính phương hay không. Và nếu phải thì tiến hành đếm hoặc in phần tử đó là xong.

Để kiểm tra một phần tử trong mảng có phải là số chính phương hay không, chúng ta sẽ dùng tới phương pháp mà Kiyoshi đã hướng dẫn trong bài:Kiểm tra số chính phương trong C++

Và chúng ta viết chương trình tìm và đếm số chính phương trong mảng C++ như sau:

#include <iostream>
#include <cmath>
using namespace std;

/*Định nghĩa macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) trong mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm kiểm tra số chính phương trong C++*/
int find_square_number(int n){
//flag = 1 => số chính phương
//flag = 0 => không phải số chính phương

int flag = 0;

//Tìm số bất kỳ nhỏ hơn hoặc bằng n mà bình phương bằng n
int i = 0;
while(i <= n){
if( pow( i, 2) == n ) {
flag = 1;
break; /*Chỉ cần tìm thấy 1 số là đủ và thoát vòng lặp*/
}
i++;
}

return flag;
}

int main(){
int array[] = {5, 4, 16, 2, 8, 7, 3, 9};
int length= SIZE_OF_ARRAY(array);

int count = 0;
/*Tìm và đếm số chính phương trong mảng C++*/

cout << "Cac so chinh phuong trong mang: ";
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = find_square_number(x);
if (check == 1) { //Tìm thấy số chính phương
cout << array[i]<<' ';
++count;
}
}

cout << "\nSo so chinh phuong trong mang: "<< count;
return 0;
}

Kết quả phép tìm và đếm số chính phương trong mảng C++:

Cac so chinh phuong trong mang: 4 16 9 
So so chinh phuong trong mang:3 so

Tính tổng các số chính phương trong mảng C++

Để tính tổng các số chính phương trong mảng C++, chúng ta chỉ cần tìm các số chính phương trong mảng bằng phương pháp Kiyoshi đã trình bày, sau đó tính tổng của chúng là xong.

Và chúng ta viết chương trình tính tổng các số chính phương trong mảng C++ như sau:

#include <iostream>
#include <cmath>
using namespace std;

/*Định nghĩa macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) trong mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm kiểm tra số chính phương trong C++*/
int find_square_number(int n){
//flag = 1 => số chính phương
//flag = 0 => không phải số chính phương

int flag = 0;

//Tìm số bất kỳ nhỏ hơn hoặc bằng n mà bình phương bằng n
int i = 0;
while(i <= n){
if( pow( i, 2) == n ) {
flag = 1;
break; /*Chỉ cần tìm thấy 1 số là đủ và thoát vòng lặp*/
}
i++;
}

return flag;
}

int main(){
int array[] = {5, 4, 16, 2, 8, 7, 3, 9};
int length= SIZE_OF_ARRAY(array);

int total = 0;
/*Tìm và đếm số chính phương trong mảng C++*/

cout << "Cac so chinh phuong trong mang: ";
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = find_square_number(x);
if (check == 1) { //Tìm thấy số chính phương
cout << array[i]<<' ';
total += array[i];

}
}

cout << "\nTong cac so chinh phuong trong mang: "<< total;
return 0;
}

Kết quả phép tính tổng các số chính phương trong mảng C++:

Cac so chinh phuong trong mang: 4 16 9 
Tong cac so chinh phuong trong mang: 29

Tính trung bình cộng các số chính phương trong mảng

Để trung bình cộng các số chính phương trong mảng, chúng ta cần phải kết hợp cả 2 bài toán là đếm số chính phươngtính tổng các số chính phương có trong mảng mà Kiyoshi đã trình bày ở trên.

Sau khi tìm được rồi, chúng ta đơn giản chia tổng cho số số chính phương là sẽ ra trung bình cộng các số chính phương trong mảng.

Và chúng ta viết chương trình tính trung bình cộng các số chính phương trong mảng như sau:

#include <iostream>
#include <cmath>
using namespace std;

/*Định nghĩa macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) trong mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm kiểm tra số chính phương trong C++*/
int find_square_number(int n){
//flag = 1 => số chính phương
//flag = 0 => không phải số chính phương

int flag = 0;

//Tìm số bất kỳ nhỏ hơn hoặc bằng n mà bình phương bằng n
int i = 0;
while(i <= n){
if( pow( i, 2) == n ) {
flag = 1;
break; /*Chỉ cần tìm thấy 1 số là đủ và thoát vòng lặp*/
}
i++;
}

return flag;
}

int main(){
int array[] = {5, 4, 16, 2, 8, 7, 3, 9};
int length= SIZE_OF_ARRAY(array);

int total = 0, count= 0;
/*Tìm và đếm số chính phương trong mảng C++*/

cout << ("Cac so chinh phuong trong mang: ");
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = find_square_number(x);
if (check == 1) { //Tìm thấy số chính phương
cout << array[i]<<' ';
total += array[i];
++count;

}
}

cout << "\nTrung binh cong cac so chinh phuong trong mang: "<< (float)total/count;
return 0;
}

Kết quả phép tính trung bình cộng các số chính phương trong mảng:

Cac so chinh phuong trong mang: 4 16 9 
Trung binh cong cac so chinh phuong trong mang: 9.66667

Bạn hãy lưu ý cách chuyển kiểu int sang float (float)total/count) để lấy kết quả chính xác khi tìm trung bình cộng nhé.

Tìm số chính phương đầu tiên và cuối cùng có trong mảng

Để tìm số chính phương đầu tiên có trong mảng, chúng ta sử dụng 1 vòng lặp để kiểm tra các phần tử từ đầu tới cuối chuỗi có phải là số chính phương hay không.

Và số chính phương đầu tiên được tìm thấy chính là số chính phương đầu tiên mà chúng ta cần tìm.

Một cách tương tự thì để tìm số chính phương cuối cùng có trong mảng, chúng ta cũng sử dụng 1 vòng lặp để kiểm tra các phần tử. Tuy nhiên lần này chúng ta cần kiểm tra ngược lại từ cuối chuỗi tới đầu chuỗi.

Và số chính phương đầu tiên được tìm thấy chính là số chính phương cuối cùng trong mảng mà chúng ta cần tìm.

Chúng ta viết chương trình tìm số chính phương đầu tiên và cuối cùng có trong mảng như sau:

#include <iostream>
#include <cmath>
using namespace std;

/*Định nghĩa macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) trong mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm kiểm tra số chính phương trong C++*/
int find_square_number(int n){
//flag = 1 => số chính phương
//flag = 0 => không phải số chính phương

int flag = 0;

//Tìm số bất kỳ nhỏ hơn hoặc bằng n mà bình phương bằng n
int i = 0;
while(i <= n){
if( pow( i, 2) == n ) {
flag = 1;
break; /*Chỉ cần tìm thấy 1 số là đủ và thoát vòng lặp*/
}
i++;
}

return flag;
}

int main(){
int array[] = {5, 4, 16, 2, 8, 7, 3, 9};
int length= SIZE_OF_ARRAY(array);


/*tìm số chính phương đầu tiên có trong mảng*/
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = find_square_number(x);
if (check == 1) { //Tìm thấy số chính phương
cout << "So chinh phuong dau tien: "<< array[i]<<endl;

break;
}
}

/*tìm số chính phương cuối cùng có trong mảng*/
for (size_t i = length-1; i >= 0; --i) {
int x = array[i];
int check = find_square_number(x);
if (check == 1) { //Tìm thấy số chính phương
cout << "So chinh phuong cuoi cung: "<< array[i];
break;
}
}
return 0;
}

Kết quả phép tìm số chính phương đầu tiên và cuối cùng có trong mảng:

So chinh phuong dau tien: 4 
So chinh phuong cuoi cung: 9

Tìm số chính phương lớn nhất và nhỏ nhất trong mảng C++

Để số chính phương lớn nhất và nhỏ nhất trong mảng C++, đầu tiên chúng ta cần phải sắp xếp các phần tử trong mảng đó theo thứ tự giảm dần.

Sau khi sắp xếp, số chính phương lớn nhất trong mảng chính là số chính phương đầu tiên có trong mảng. Và ngược lại thì số chính phương nhỏ nhất trong mảng chính là số chính phương cuối cùng có trong mảng.

Về sắp xếp mảng trong C++ thì chúng ta sẽ dùng tới phương pháp mà Kiyoshi đã hướng dẫn trong bài: Sắp xếp mảng trong C++

Và chúng ta viết chương trình tìm số chính phương đầu tiên và cuối cùng có trong mảng như sau:

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;

/*Định nghĩa macro SIZE_OF_ARRAY để lấy độ dài (số phần tử) trong mảng chỉ định*/
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))

/*Tạo hàm so sánh giảm dần sử dụng trong hàm qsort*/
int compareIntDesc(const void* a, const void* b){
int aNum = *(int*)a;
int bNum = *(int*)b;

return bNum - aNum;
}

/*Tạo hàm kiểm tra số chính phương trong C++*/
int find_square_number(int n){
//flag = 1 => số chính phương
//flag = 0 => không phải số chính phương

int flag = 0;

//Tìm số bất kỳ nhỏ hơn hoặc bằng n mà bình phương bằng n
int i = 0;
while(i <= n){
if( pow( i, 2) == n ) {
flag = 1;
break; /*Chỉ cần tìm thấy 1 số là đủ và thoát vòng lặp*/
}
i++;
}

return flag;
}

int main(){
int array[] = {5, 4, 16, 2, 8, 7, 3, 9};
int length= SIZE_OF_ARRAY(array);

/*Sử dụng hàm qsort để sắp xếp mảng giảm dần*/
qsort(array, length, sizeof(int), compareIntDesc);

/*Tìm số chính phương đầu tiên có trong mảng
Cũng chính là số chính phương lớn nhất trong mảng
*/
for (size_t i = 0; i < length; ++i) {
int x = array[i];
int check = find_square_number(x);
if (check == 1) { //Tìm thấy số chính phương
cout << "So chinh phuong lon nhat: "<< array[i] <<endl;

break;
}
}

/*Tìm số chính phương cuối cùng có trong mảng
Cũng chính là số chính phương nhỏ nhất trong mảng
*/
for (size_t i = length-1; i >= 0; --i) {
int x = array[i];
int check = find_square_number(x);
if (check == 1) { //Tìm thấy số chính phương
cout << "So chinh phuong nho nhat: "<< array[i];
break;
}
}
return 0;
}

Kết quả phép số chính phương lớn nhất và nhỏ nhất trong mảng C++:

So chinh phuong lon nhat: 16 
So chinh phuong nho nhat: 4

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách tìm số chính phương trong mảng C++ rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C++ trong các bài học tiếp theo.

URL Link

https://laptrinhcanban.com/cpp/lap-trinh-cpp-co-ban/mang-trong-cpp/tim-so-chinh-phuong-trong-mang-cpp/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

HOME  › >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.