Processing math: 100%

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.

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

朴素方法

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

  • 我们取整数 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 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告