C++ 中計算 n 之前平方數和非平方數


給定一個數字 N。目標是找到正數的有序對,使得它們的立方和為 N。

樸素方法

遍歷從 1 到 N 的所有數字,並檢查它是否為完全平方數。如果 floor(sqrt(i))==ceil(sqrt(i))。

則該數字為完全平方數。

有效方法

小於 N 的完全平方數可以使用公式找到:floor(sqrt(N))。

讓我們用例子來理解。

輸入 

N=20

輸出 

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

解釋 

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

輸入 

N=40

輸出 

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

解釋 

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

樸素方法

下面程式中使用的方法如下

  • 我們取整數 N。

  • 函式 squareNums(int n) 取 n 並返回小於 n 的完全平方數或非平方數的個數。

  • 將初始變數 count 設定為 0。

  • 使用 for 迴圈從 i=1 遍歷到 i<=n

  • 如果 floor(sqrt(i))==ceil(sqrt(i)),則該數字為完全平方數,因此遞增 count。

  • 在所有迴圈結束時,count 將包含完全平方數的總數。

  • N-squares 將是非平方數。

示例

 線上演示

#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;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

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

有效方法

下面程式中使用的方法如下

  • 我們取整數 N。

  • 取變數 squares = floor(sqrt(N))。

  • 變數 squares 將包含小於 N 的完全平方數的個數。

  • N-squares 將包含小於 N 的非平方數的個數。

示例

 線上演示

#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;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

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

更新於: 2020年10月31日

858 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.