Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm các số vuông và không vuông trước n trong C ++

Chúng ta được cho một số N. Mục tiêu là tìm các cặp số dương có thứ tự sao cho tổng các hình lập phương của chúng là N.

Phương pháp tiếp cận ngây thơ

Đảo ngược tất cả các số từ 1 đến N và kiểm tra xem nó có phải là một hình vuông hoàn hảo hay không. If floor (sqrt (i)) ==ceil (sqrt (i)).

Khi đó con số là một hình vuông hoàn hảo.

Phương pháp tiếp cận hiệu quả

Các hình vuông hoàn hảo dưới N có thể được tìm thấy bằng công thức:floor (sqrt (N)).

Hãy cùng hiểu với các ví dụ.

Đầu vào

N=20

Đầu ra

Count of square numbers: 4
Count of non-square numbers: 16

Giải thích

Square numbers are 1, 4, 9 and 16. Rest all are non-squares and less than 20.

Đầu vào

N=40

Đầu ra

Count of square numbers: 6
Count of non-square numbers: 34

Giải thích

Square numbers are 1, 4, 9, 16, 25, 36. Rest all are non-squares and less than 40.

Phương pháp tiếp cận ngây thơ

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy số nguyên N.

  • Hàm squareNums (int n) nhận n và trả về số lượng các số dưới n là hình vuông hoàn hảo hoặc không phải là hình vuông.

  • Lấy số lượng biến ban đầu là 0.

  • Di chuyển bằng vòng lặp for từ i =1 đến i <=n

  • Nếu floor (sqrt (i)) ==ceil (sqrt (i)), thì số là một hình vuông hoàn hảo nên số gia tăng.

  • Ở cuối tất cả các số vòng lặp sẽ có tổng số là các hình vuông hoàn hảo.

  • N-ô vuông sẽ là những số không phải là ô vuông

Ví dụ

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int squareNums(int n){
   int count = 0;
   for (int i = 1; i <= n; i++){
      if(floor(sqrt(i))==ceil(sqrt(i)))
         { count++; }
   }
   return count;
}
int main(){
   int N = 40;
   int squares=squareNums(N);
   cout <<endl<<"Count of squares numbers: "<<squares;
   cout <<endl<<"Count of non-squares numbers: "<<N-squares;
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of squares numbers: 6
Count of non-squares numbers: 34

Phương pháp tiếp cận hiệu quả

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy số nguyên N.

  • Lấy biến bình phương =sàn (sqrt (N)).

  • Các hình vuông biến đổi sẽ có một số hình vuông hoàn hảo dưới N.

  • N ô vuông sẽ là số ô không phải ô vuông bên dưới N.

Ví dụ

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int main(){
   int N = 40;
   int squares=floor(sqrt(N));
   cout <<endl<<"Count of squares numbers: "<<squares;
   cout <<endl<<"Count of non-squares numbers: "<<N-squares;
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of squares numbers: 6
Count of non-squares numbers: 34