反向打印数组

时间:2018-03-02 12:15:22

标签: c++

任务

您将获得一个N个整数数组,您必须以相反的顺序打印整数。

约束

1·; = N< = 1000

1< = A_i< = 10000,其中A_i是数组中的第i个整数。

输入

4

1 2 3 4

输出

4 3 2 1

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int N, y; //declaring N as the length of array
    cin >> N; //intakes the length as an input
    if (N>=1 && N<=1000){ //checks whether the length satisfies the rules
        int a[N]; // makes an array containing N elements
        for (int x =1; x<N; x++){ //starts transcription on the array
            cin>>y; //temporarily assigns the input on a variable
            if (y>=1&&y<=10000){ //checks if the input meets rules
                a[x]=y; //copies the variable on the array 
            }        
        }

        for (int z = N; z>1; z--){ //runs a loop to print in reverse
            cout<<a[z]<<endl;
        } 
    }

    return 0;
}

问题

获得的输出

-1249504352

3

2

表示转录错误。

问题

有人可以告诉我我在哪里弄错了吗?其次,是否可以直接检查输入是否满足要求而不是暂时为其声明变量?

2 个答案:

答案 0 :(得分:3)

以下是惯用语c++11中的解决方案,使用std::vector,这是一个可动态调整大小的容器,可用于此类应用程序。

#include <vector>
#include <iostream>
#include <algorithm>

int main() {
    int size;
    std::cin >> size; // take in the length as an input

    // check that the input satisfies the requirements,
    // use the return code to indicate a problem
    if (size < 1 || size > 1000) return 1;

    std::vector<int> numbers; // initialise a vector to hold the 'array'
    numbers.reserve(size);    // reserve space for all the inputs

    for (int i = 0; i < size; i++) {
        int num;
        std::cin >> num; // take in the next number as an input

        if (num < 1 || num > 10000) return 1;

        numbers.push_back(num);
    }

    std::reverse(numbers.begin(), numbers.end()); // reverse the vector

    // print each number in the vector
    for (auto &num : numbers) {
        std::cout << num << "\n";
    }

    return 0;
}

有几点需要注意:

  • using namespace std大部分时间都被视为不良做法。使用(例如)std::cin代替来自std命名空间的内容。

  • numbers.reserve(size)不是正确性所必需的,但可以通过提前预留空间来加快程序。

  • for ( auto &num : numbers )使用c++11- Destination ip address(es): 1.2.4.6, 2.2.4.6, 3.2.4.6,\n 4.2.4.6及更高版本中提供的range-based for loop

答案 1 :(得分:1)

您可以使for循环索引从高到低:

for (int i = N-1; i > 0; --i)
{
  std::cout << a[i] << "\n";  // Replace '\n' with space for horizontal printing.
}
std::cout << "\n";

这也适用于std::vector

使用std::vector,您可以使用反向迭代器。还有其他技术可用(如其他答案)。