Bài tập cơ bản này ta có thể có nhiều hướng giải quyết khác nhau, như sử dụng vòng lặp for , sử dụng vòng lặp while, …

Đầu vào sẽ là một biến nguyên N và yêu cầu của bài toán là Kiểm tra N có phải số hoàn hảo hay không.

Bạn đang xem: Tìm số hoàn hảo từ 1 đến n

2. Lời giải

Đầu tiên chúng ta cần phải tìm hiểu số hoàn hảo là gì?

Số hoàn hảo hay còn gọi là số hoàn thiện, đó là một số nguyên dương lớn hơn 0 và có tổng các ước (ngoại trừ số đó) bằng chính nó.

Ví dụ như 6 có ước số nhỏ hơn nó là 1, 2, 3 và tổng 1+2+3=6, suy ra 6 là số hoàn hảo.

Để giải được bài tập kiểm tra N có phải số hoàn hảo hay không bạn phải có kiến thức về toán học cơ bản, có kiến thức về lập trình C cơ bản và cách sử dụng vòng lặp.

Các bước thực hiện bài toán như sau:

Bước 1: Ta khai báo biến N để gán giá trị của N, biến int S=0 để tính tổng các ước số của N (khác N).

Bước 2: Sử dụng hàm for để bắt đầu duyệt từ 1 đến N-1, mỗi lần i sẽ tăng lên 1

Bước 3: Sử dụng câu điều kiện if trong vòng for để kiểm tra từ phần tử N có chia hết cho phần tử i không. Nếu có ta tăng biến S lên i.

Bước 4: Ta dùng điều kiện if với điều kiện N=S thì in ra màn hình N là số hoàn hảo còn ngược lại N không phải là số hoàn hảo

Chương trình giải bài tập kiểm tra N có phải số hoàn hảo hay không như sau:

#includeint main(){ //khai bao bien N int N; //khai bao bien S int S=0; do { // nhap du lieu gan vao bien N printf("\n
Nhap N = "); scanf("%d", &N); if(N 0. Xin nhap lai !"); } }while(N 0 neu NVí dụ tôi nhập N=6

Kết quả:

Nhap N = 66 la so hoan hao
3. Tổng kết

Để thực hiện giải bài tập kiểm tra N có phải số hoàn hảo hay không bạn đọc cần phải biết về số hoàn hảo là gì?, có kiến thức cơ bản ngôn ngữ lập trình C, bạn cần nắm vững cách nhập xuất căn bản, các cách sử dụng vòng lặp trong C và các phép toán học cơ bản .

Bài tập trên có thể giải bằng các khác là sử dụng vòng lặp while.

Chương trình như sau:

#includeint main(){ //khai bao bien N int N; //khai bao bien S int S=0; do { // nhap du lieu gan vao bien N printf("\n
Nhap N = "); scanf("%d", &N); if(N 0. Xin nhap lai !"); } }while(N 0 neu NVí dụ tôi nhập N=15

Kết quả:

Nhap N = 1515 khong phai la so hoan hao

Facebook Twitter Linkedin int%20main()%20%20%20%20//khai%20bao%20bien%20N%20%20%20%20int%20N;%20%20%20%20//khai%20bao%20bien%20S%20%20%20%20int%20S=0;%20%20%20%20do%20%20%20%20%20%20%20%20//%20nhap%20du%20lieu%20gan%20vao%20bien%20N%20%20%20%20%20%20%20%20printf(n
Nhap%20N%20=%20);%20%20%20%20%20%20%20%20scanf(%d,%20&N);%20%20%20%20%20%20%20%20if(N%20%200.%20Xin%20nhap%20lai%20!);%20%20%20%20%20%20%20%20%20%20%20%20while(N%20%200%20neu%20Nint%20main()%20%20%20%20//khai%20bao%20bien%20N%20%20%20%20int%20N;%20%20%20%20//khai%20bao%20bien%20S%20%20%20%20int%20S=0;%20%20%20%20do%20%20%20%20%20%20%20%20//%20nhap%20du%20lieu%20gan%20vao%20bien%20N%20%20%20%20%20%20%20%20printf(n
Nhap%20N%20=%20);%20%20%20%20%20%20%20%20scanf(%d,%20&N);%20%20%20%20%20%20%20%20if(N%20%200.%20Xin%20nhap%20lai%20!);%20%20%20%20%20%20%20%20%20%20%20%20while(N%20%200%20neu%20N Pinterest

Thuật toán kiểm tra số hoàn hảo trong C/C++. Ứng dụng vào bài toán tìm, liệt kê số hoàn hảo trong mảng các số nguyên dương n phần tử, số hoàn thiện nhỏ hơn n.


1. Số hoàn hảo là gì?

Số hoàn hảo (perfect number) hay còn gọi là số hoàn thiện là số: nguyên dương mà tổng các ước nguyên dương chính thức của nó bằng chính nó.Ước chính thức là các ước mà số đó chia hết trừ nó và bao gồm cả số 1.

Ví dụ số hoàn hảo:

6 là số hoàn hảo, các ước chính thức của 6: 1, 2, 3Ta có : 6 = 1 + 2 + 328 là số hoàn hảo: 1 + 2 + 4 + 7 + 14 = 2810 không phải số hoàn hảo: 1+ 2 + 5 = 8 (khác 10)
*
Công thức tính số hoàn hảo

Ta sẽ giải quyết bài toán áp dụng tư tưởng theo đúng định nghĩa. Để kiếm tra số nguyên dương n có phải là số hoàn hảo hay không, thuật toán đưa ra ở đây chính là duyệt và tìm tất cả các ước của n sau đó cộng lại.

Áp dụng vào lập trình ta sẽ giải quyết nó như sau:

Khai báo một biến tam = 0; biến này sẽ dùng để tính tổng các ước
Sử dụng vòng lặp i từ 0 đến nhỏ hơn n. Nếu i là ước của n (tức là n % i ==0) thì ta cộng tam với i : tam = tam + i;So sánh tam với ntam với 0. Nếu tam == ntam !=0 thì tức là số đó là số hoàn hảo, ngược lại thì không.

Xem thêm:

Sẽ có bạn thắc mắc tại sao ta không xét trường hợp n 2. Kiểm tra số hoàn hảo C/C++

Mình sẽ triển khai hàm kiểm tra một số nguyên dương n có phải là số hoàn hảo hay không dựa theo đúng ý tưởng nêu ở phần 1 nhé!

Code C/C++:

// Ham kiem tra so hoan haobool kt_hoanhao(int n){int tam =0; // Khai báo biến tạm lưu tổng các ướcfor(int i=1; i i là ước chính thức của ntam = tam + i; // cộng vào tổng các ước}if(tam !=0 && tam == n) // Nếu tổng các ước khác 0 và bằng n trả về truereturn true;else // Nếu tam khác n hoặc tam ==0 thì trả về falsereturn false;}Khi có hàm kiểm tra số hoàn thiện, ta có thể áp dụng vào các bài tập tương ứng. Ví dụ như (in các số hoàn hảo trong mảng, các số ht nhỏ hơn n . . .)

Dưới đây mình triển khai chương trình in ra tất cả các số hoàn thiện trong mảng trong C++ nhé!

Code C++:

#includeusing namespace std;// Ham kiem tra so hoan haobool kt_hoanhao(int n){int tam =0;for(int i=1; i>n;cout>a;}// In so hoan hao trong dayvoid in_sohoanhao(int a<>, int n){cout

3. Lời kết

Perfect number là một dạng bài tập khá hay, nó giúp bạn hiểu hơn về tư duy lập trình, cách kết hợp vòng lặp, câu điều kiện . . . Từ đó giúp bạn cải thiện về kĩ năng của bản thân. Luyện tập từ những thứ nhỏ nhất, bạn sẽ thấy được sự phát triển của mình.

Bài viết của mình đến đây là hết, nếu bạn có lời khuyên gì cho mình hay bất kỳ thắc mắc nào, đừng ngại để lại comment xuống phía dưới bài viết nhé!