打印最大非完美正方形

Print the maximum non perfect square

本文关键字:完美 正方形 打印      更新时间:2023-10-16

我正在尝试制作一个 c++ 程序,该程序可以找到数组中的最大非完美正方形并打印出来,即完美正方形,即 x = y^2 => 4 = 2^2 .

这是我尝试过的,对我不起作用,不知道为什么:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int arr[n];
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
        sqrt(arr[i]);
        if ((arr[i] * 10) % 10 == 0)
            arr[i] = arr[1];
        else
            arr[i] = arr[0];
    }
    for (int i = 0; i < n; i++)
    {
        if (arr[0] < arr[i])
            arr[0] = arr[i];
    }
    cout << arr[0] << endl;
    return 0;
}

我的逻辑是取每个数组元素的平方根并检查它是不完美的还是完美的。如果我们将元素乘以 10,然后取模 10,那么我们知道它是整数还是十进制。例如:2*10 = 20,20%10 = 0(完美平方(,否则不完美。然后,我将每个非完美正方形存储在arr[0]中,在下一个循环中,我应该找到最大的非完美正方形并打印出来。我做错了什么?

附注:
考虑arr[variable]是有效的,因为它在 CodeBlock 中工作。谢谢!

你失去了sqrt的结果。 sqrt(arr[i])不会改变arr[i]).

您不正确地检查平方根是否为积分。您应该将 sqrt 的结果转换为 int,将其自身相乘并与 arr[i] 进行比较。

我让你可以自由地自己正确更新你的代码。

您可以使用

此逻辑来查找一个数字是否为完全平方,这是查找正数array的最大非完全平方的一种方法,在进入循环之前初始化answer=-1n数组的大小

double answer = -1,temp;
for(int i=0;i<n;i++){                                       
    if((temp = array[i]) != (sqrt(array[i])*sqrt(array[i]))){
        if(temp > answer){
            answer = temp;
        }
    }
}
#include <iostream>
#include <cmath>
using namespace std;
int main () {
  int n;
  cin>>n;
  int k[n];
  double arr[n];
  for (int i = 0 ; i < n ; i++){
    cin>>k[i];
    arr[i]=sqrt(k[i]);
    int j = arr[i];
    if (arr[i]==j){
      arr[i]=0;
      }
    }
  double m=0;
  int index = 0;
  for (int i = 0; i < n; i++){
    if (arr[i]>m){
      m=arr[i];
      index = i;
    }
  }
  cout << k[index];
}

这是一个代码。 我们引入了一个 double ,这样它就可以存储小数。 然后我们引入一个整数。 如果数字的平方根是小数,则它不是完全平方。 但是,当我j引入这个整数时,它会将arr[i]转换为整数。 如果数字是完全平方,则arr[i]是整数,j==arr[i] . 我们不希望这样,所以我们把它放在平等的0 . 我们找到最大的数组,并标记索引。 然后我们用该索引打印出原始数组中的原始数字。 我添加了这个float因为它不存储每个小数点。

澄清一下:让我们说arr[i]=4.55556. 然后j=4. arr[i]!=j .如果arr[i]=5j=5arr[i]=j ,然后将 arr[i] 设置为 0