Số Chính Phương Là Gì ? Các Hàm Tìm Số Chính Phương
Có thể bạn quan tâm
- Sign in / Join
sinhvientot.net
Home Lập trình C/C++ Số chính phương là gì ? các hàm tìm số chính phương Facebook Twitter Pinterest WhatsApp Trong các bài toán căn bản về lập trình thì bài toán tìm số chính phương là một trong các bài toán được xem là kinh điển của lập trình. Hôm nay chúng ta sẽ cũng tìm hiểu về chủ đề này.
Số chính phương là gì?
Số chính phương là số khi lấy căn bậc 2 của nó ta được một số nguyên hay có thể hiểu số chính phương là số có kết quả là bình phương của một số nguyên.
Một số ví dụ tìm số chính phương
Ví dụ 1: Nhập một số từ bàn phím và kiểm tra có phải là số chính phương hay không
Thuật toán: lấy căn của số vừa nhập và ép kiểu về kiểu số nguyên, sau đó bình phương số đã ép kiểu. nếu sau khi bình phương kết quả bằng số ban đầu thì kết luận số vừa nhập là số chính phương, ngược lại không phải
Code C/C++
#include<stdio.h> #include<conio.h> #include<math.h> void main() { int x; printf("Nhap 1 so nguyen: "); scanf("%d", &x); if (x > 3) { int a = sqrt((double)x); if (a*a == x) printf("%d la so chinh phuong", x); else { printf("%d khong la so chinh phuong", x); } } else printf("%d khong la so chinh phuong",x); getch(); }Ví dụ 2: Tìm các số có trong 1 khoảng [x,y] nhập từ bàn phím ( khoảng từ [1-10] ) và xuất ra màn hình
Thuật toán:
Chạy từ x đến y,
Kiểm tra tất cả các giá trị đã đi qua, nếu thỏa thì xuất ra màn hình.
Để kiểm tra thì chúng ta cần phải có 1 hàm kiểm tra số chính phương
Code C/C++
Hàm kiểm tra:
int KTchinhphuong(int a) { if (a>3) { if (a == int(sqrt(double(a)))*int(sqrt(double(a)))) // ép kiểu về số nguyên return 1; // đúng trả về 1 else return 0; // sai trả về 0 } return 0; }Hàm liệt kê:
void Lietkechinhphuong (int x, int y) { for(int i=x ; i<=y ; i++) if(KTchinhphuong(i)==1) // gọi hàm kiểm tra số chính phương printf("%5d",i); }Ví dụ 3: Tìm và xuất ra màn hình các số chính phương có trong mảng 1 chiều
Thuật toán: Đi từ đầu mảng đến cuối mảng, kiểm tra tất cả các giá trị nếu thỏa thì xuất ra màn hình theo yêu cầu. Để thao tác trên mảng thì chúng ta cần tạo ra mảng 1 chiều. xem thêm ở bài viết Nhập xuất mảng một chiều
Code C/C++
//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]); } //Hàm kiểm tra: int KTchinhphuong(int a) { if (a>3) { if (a == int(sqrt(double(a)))*int(sqrt(double(a)))) // ép kiểu về số nguyên return 1; // đúng trả về 1 else return 0; // sai trả về 0 } return 0; } //Hàm xuất các số chính phương của mảng void Lietkechinhphuong(int a[], int n) { for (int i = 0; i <= n; i++) if (KTchinhphuong(i) == 1) // gọi hàm kiểm tra số chính phương printf("%5d", i); } //Hàm main: void main() { // khai báo mảng và biến int a[100],n; NhapMang1C(a,n); Lietkechinhphuong(a,n); getch(); }Ví dụ 4: Tìm và xuất ra màn hình các số chính phương của ma trận a[n,m].
Thuật toán: Để thao tác trên ma trận thì chúng ta cần tạo ra một mảng 2 chiều, sau đó tương tự chúng ta lại kiểm tra điều kiện số chính phương và xuất các số ra như đề bài.
Code C/C++
//Tạo ma trận: #define MaxD 100 #define MaxC 100 void NhapMaTran(int a[][MaxC], int &m, int &n) { do { printf("Nhap so dong: "); scanf("%d", &m); } while (m<=0); do { printf("Nhap so cot: "); scanf("%d", &n); } while (n<=0); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { printf("Phan tu a[%d][%d]", i, j); scanf("%d", &a[i][j]); } } //Xuất ma trận: void XuatMaTran(int a[][MaxC], int m, int n) { for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { printf("%5d \n", a[i][j]); } } //Tìm các số chính phương của ma trận: void MaTranSoChinhPhuong(int a[][MaxC], int m, int n) { for (int i = 0; i < m;i++) for (int j = 0; j < n; j++) { if (KTchinhphuong(a[i][j]) == 1) printf("%5d", a[i][j]); } } //Hàm main: void main() { int A[MaxD][MaxC]; int M, N; NhapMaTran(A, M, N); XuatMaTran(A, M, N); printf("Cac so chinh phuong co trong ma tran la:"); MaTranSoChinhPhuong(A, M, N); getch(); }Kết quả:
Nhap so dong: 5
Nhap so cot: 1
Phan tu a[0][0]2
Phan tu a[1][0]3
Phan tu a[2][0]4
Phan tu a[3][0]5
Phan tu a[4][0] 6
2 3 4 5 6
Cac so chinh phuong co trong ma tran la: 4 9
Trên đây là một số ví dụ về tìm kiếm và liệt kê số chính phương! các bạn có thể xem thêm Số nguyên tố là gì ? Hàm tìm số nguyên tố
Chúc các bạn thành công!
RELATED ARTICLESMORE FROM AUTHOR
C/C++ Sự khác nhau giữa Inline function và Macro trong C
C/C++ Trong ngôn ngữ C/C++ có bao nhiêu vùng nhớ (Memory layout)
C/C++ Cấu trúc dữ liệu danh sách nhân viên
C/C++ Tổng quan File trong C
C/C++ Cấu trúc kiểu dữ liệu sinh viên
C/C++ Cấu trúc mô tả một điểm trên tọa độ xOy
3 COMMENTS
-
Chào anh Tuấn, Bài viết của anh rất dễ hiểu và giới thiệu toàn diện nhiều cách sử dụng khác nhau từ một hàm kiểm tra số chính phương. Nó thật sự là cần thiết đối với em. Cám ơn anh đã chia sẻ nó rất là chi tiết.
Thưa anh Tuấn, cách trên của anh là phụ thuộc vào độ chính xác của hàm sqrt(). Em mong muốn tìm 1 cách khác có thể tìm chính xác hơn không phụ thuộc vào hàm nói trên. Em có tìm hiểu thấy có cách tìm số chính phương theo kiểu sau: Em mong anh có thời gian thì giải thích giúp em đoạn code tìm số chính phương trong một lân cận [1, x] với x là số cần kiểm tra. – Em không rõ là số 1 tại sao không hiển thị là số chính phương? – Em nhìn hoài mã vẫn không nghiệm bằng tay được tại sao lại kiểm tra ra được số chính phương? (Nhất là chỗ “return true;”) – Giải thuật này là nhanh hơn hay là cách kiểm tra của anh là nhanh hơn. Tại sao? Mã code như sau: (JAVA) public static boolean isSquareNumber(int x) { int left = 1, right = x, m; while (left x) { right = m – 1; } else { if (m * m < x) { left = m + 1; } else { return true; } } } return false; } Rất mong nhận được sự phản hồi sớm của anh cùng nhiều bài viết mới hay hơn nữa! 😀
Log in to leave a comment -
thuat toan cua anh sai ! So 1 van la so chinh phuong
Log in to leave a comment-
Trong bài này, ko kiểm tra số 1 và số 2 bạn
Log in to leave a comment
-
LEAVE A REPLY Cancel reply
Log in to leave a comment
This site uses Akismet to reduce spam. Learn how your comment data is processed.
Danh sách các bài học
Các kiểu dữ liệu cơ bản trong ngôn ngữ C/C++
Mr Good - April 16, 2016 0Hướng dẫn Tạo Project Visual C++ trong Visual Studio 2012
April 16, 2016Biến-Hằng-Câu lệnh và biểu thức trong C/C++
April 16, 2016Cấu trúc IF-ELSE
April 16, 2016
Cấu trúc switch – case
April 16, 2016
Vòng lặp For
April 16, 2016
Cấu trúc While, Do-while
April 16, 2016Cách sử dụng hàm trong lập trình
April 16, 2016
Mảng một chiều
April 16, 2016 Load moreBài viết mới nhất
Download Download Cisco Packet Tracer
Windows 10 Hướng dẫn cài đặt webserver trên localhost để chạy wordpress
Hướng dẫn cấu hình IP ILO máy chủ HP DL380 Gen10
CentOS CentOS 8 – Giới thiệu về hệ điều hành Linux (P1)
Load more © Copyright 2016, All Rights Reserved. Donations are always appreciated! MEW: 0x296f1a39d5Ca3cb83C76724eA38af3B90B90109D MORE STORIESHướng dẫn sử dụng Cortana trên Window 10
Nguyễn Quí Đức - August 18, 2016 0Cài đặt Windows Server 2016/2012/2008/2003
Mr Good - April 17, 2016 0Từ khóa » Số Chính Phương Là Gì C++
-
Kiểm Tra Số Chính Phương Trong C++
-
Kiểm Tra Số Chính Phương Trong C/C++ - Lập Trình Không Khó
-
Thuật Toán Kiểm Tra Số Chính Phương C++ - Freetuts
-
Kiểm Tra Số Chính Phương Trong C/C++ - Check Square Number
-
Số Chính Phương Là Gì? Cách Tính Số Chính Phương Trong C++, Pascal
-
Huật Toán Kiểm Tra Số Chính Phương C++ - Huật Toán Căn Bản
-
Chương Trình Kiểm Tra Số Chính Phương Trong Lập Trình C/C++
-
Thuật Toán Kiểm Tra Số Chính Phương C++
-
Bài Toán Số Chính Phương Trong Toán Và Tin Học - Đọc Tài Liệu
-
Số Chính Phương Là Gì C++ Là Gì (tìm Hiểu Các Thông Tin Và Vấn đề ...
-
Hàm Tính Trung Bình Các Số Chính Phương Có Trong Mảng Code C/C++
-
Thuật Toán Kiểm Tra Số Chính Phương C++
-
Bài Tập C++: Viết Chương Trình, Hàm Kiểm Tra Số Chính Phương
-
Thuật Toán Kiểm Tra Số Chính Phương C++
-
Số Chính Phương Là Gì? Tính Chất Của Số Chính Phương
-
Kiểm Tra Một Số Có Phải Số Chính Phương Trong C | Lập Trình Từ Đầu
-
Tính Trung Bình Cộng Các Số Chính Phương Trong Mảng - Hỏi Đáp
-
[Basic-DSAA] Giải Thuật Sắp Xếp - Bài Tập: Dãy Số Chính Phương.
Công nghệ
Công nghệ
Giải pháp
Download
HTML/CSS
HTML/CSS
ASP.NET Core
Thủ thuật
Excel
PowerPoint
Excel
Công nghệ
Công nghệ
Download
Download