【问题标题】:C++ How to change the output on a new arrayC ++如何更改新数组的输出
【发布时间】:2012-11-27 01:32:29
【问题描述】:

所以我编写了一个程序,它应该从一个数组中选择完美的正方形并将其放入另一个数组中。示例: (2,4,13,5,25,66) 和第二个数组(结果)应如下所示 (4,25) 我的结果看起来像这样 (0,4,0,0,25,0) ...所以它的一半好...如何让它只显示 4,25?

#include<iostream.h>
#include<math.h.>

int main()
{
    int A[100],i,n,p,j;

    cout << "Number of array elements=";
    cin >> n;

    for(i=1;i<=n;i++)
    {
        cout<<"A["<<i<<"]=";
        cin>>A[i];
    }

    for(i=1;i<=n;i++)
    {
        p=sqrt(A[i]) ;   
        if(p*p==A[i])
            A[j]=A[i];
        else
            A[i]=0;

        cout << A[i] << " ";
    }

    return 0;
}

仅使用 c++ 基本命令...就像我一样

【问题讨论】:

  • 你认为j 会做什么? “另一个数组”是同一个数组有什么原因吗?

标签: c++ arrays perfect-square


【解决方案1】:

您需要单独计算您找到了多少完美正方形,并使用它来将您的答案放入完美正方形数组中:

int squares[???];
// ...
if(p*p==A[i]) {
  squares[squaresFound]=A[i];
  squaresFound++;
}

现在的问题是决定squares 数组应该有多长。你不知道你会得到多少个正方形。您是否要将它的大小与A 相同并用0s 填充其余部分?还是您希望正方形数组的大小正好合适?

如果您希望它的尺寸​​合适,最好使用std::vector

std::vector<int> squares;
// ...
if(p*p==A[i]) {
  squares.push_back(A[i]);
}

但我认为你愚蠢的“仅限基本 C++ 命令”限制不允许你这样做。

【讨论】:

    【解决方案2】:

    您谈论的是第二个数组(结果),但您的代码只声明了一个数组!此外,您引用了A[j],但您的j 尚未初始化。

    你应该声明另一个数组B[100],将j初始化为零,然后当你找到一个正方形时使用这个代码:

    int j = 0;
    for (int i=0 ; i != n ; i++) {
        int p = sqrt(A[i]);
        if(p*p==A[i]) {
            B[j++] = A[i];
        }
    }
    

    【讨论】:

    • 只要实际使用了j,技术上可以使用A作为结果数组。
    • @EmilVikström 绝对!然而,这不是问题的表述方式。我强烈怀疑这是需要第二个数组的学校作业或自学。
    【解决方案3】:

    创建另一个数组,从 resultArray 中删除所有出现的 0 并将非 0 添加到 newArray。

    int j=0
    if(A[i]==p*p) 
      squares[j++]=A[i];
    

    【讨论】:

      【解决方案4】:
      #include <cmath>
      #include <iostream>
      using namespace std;
      
      
      int main()
      {
          int A[100];
          int n;
      
          cout << "Number of array elements = " << endl;
          cin >> n;
          for(int i = 0; i < n; i++)
          {
              cout << "A[" << i << "] = ";
              cin >> A[i];
          }
      
          int B[100];
          int cnt_sqr = 0;
          for(int i = 0; i < n; i++)
          {
              int p = sqrt(A[i]);
              if (p * p == A[i])
              {
                  B[cnt_sqr++] = A[i];
              }
          }
      
          for (int i = 0; i < cnt_sqr; i++)
          {
              cout << B[i] << ' ';
          }
          return 0;
      }
      

      上面告诉你的完整代码

      【讨论】:

        【解决方案5】:

        如果您不想修改代码,可以编写以下代码:

        for(i=1;i<=n;i++)
        {
            p=sqrt(A[i]) ;   
            if(p*p==A[i])
            {
                cout << A[i] << " ";
            }
        }
        

        它只会打印完美的正方形。

        如果要将元素复制到另一个数组中:

        int squares[100] = {0}; // Assuming that all values can be perfect squares
        int square_count = 0;
        
        for(i=1;i<=n;i++)
        {
            p=sqrt(A[i]) ;   
            if(p*p==A[i])
            {
                squares[square_count++] = A[i];
            }
        }
        

        【讨论】:

        • 是的 tnx 非常有用的答案,但我必须创建一个新向量来显示这些值
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-23
        • 2022-12-17
        • 1970-01-01
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        相关资源
        最近更新 更多