打印最大非完美正方形

时间:2018-01-21 03:48:16

标签: c++ arrays

我试图创建一个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]中,在下一个循环中,我应该找到最大的非完美正方形并打印它。我做错了什么?

PS:
考虑arr[variable]是有效的,因为它适用于CodeBlocks。谢谢!

3 个答案:

答案 0 :(得分:1)

您丢失了sqrt的结果。 sqrt(arr[i])不会更改arr[i])

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

我让您自由更新您的代码。

答案 1 :(得分:1)

#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=4arr[i]!=j。如果arr[i]=5j=5arr[i]=jarr[i]设置为0

答案 2 :(得分:1)

您可以使用this逻辑来查找数字是否为完全正方形,这是找到array正数的最大非完美平方的一种方法,初始化{{1}在进入循环之前,answer=-1是数组的大小

n