HackerRank说~对标准输出没有回应~.C++

HackerRank says ~no response on stdout~. C++

本文关键字:回应 C++ 标准输出 HackerRank      更新时间:2023-10-16

我为HackerRank上的绝对排列问题编写了这个解决方案。它在dev-C++上运行良好,但在Hackerrank上不起作用。我发现当我删除 abs_perm(( 时代码会产生输出。这里有什么问题?

#include <iostream>
using namespace std;
int arr[100000];
int check(int n, int k)
{
    if ( (2*k == n) || (k == 0) || (n - 4*k == 0) )
        return 1;
    else if (k < n/2)
        return check(n - 4*k, k);
    else
        return 0;
}
void swap(int &a, int &b)
{
    int c = b;
    b = a;
    a = c;
}
void ini(int n)
{
    for (int i = 0; i < n; i++)
    {
        arr[i] = i+1;
    }
}
void abs_perm(int n, int k)
{
    for (int i = 0; i < k; i++)
    {
        swap(arr[i], arr[k+i]);
    }
    if (2*k == n)
        return;
    for (int i = n - 1; i > n - k - 1; i--)
    {
        swap(arr[i], arr[i-k]);
    } 
    if (n - 4*k == 0)
        return;
    abs_perm(n - 4*k, k);
}
int main()
{
    int T;
    cin >> T;
    int N[T], K[T];
    for (int i = 0; i < T; i++)
    {
        cin >> N[i] >> K[i];
    }
    for (int i = 0; i < T; i++)
    {
        cout << N[i] << " " << K[i] << "n";
    }
    for (int i = 0; i < T; i++)
    {
        if ( !check(N[i], K[i]) )
            cout << "-1n";
        else
        {
            ini(N[i]);
            abs_perm(N[i], K[i]);
            for (int j = 0; j < N[i]; j++)
            {
                cout << arr[j] << " ";
            }
            cout << "n";
        }
    }
    return 0;
}

数组是当您在编译时知道结构的维度时使用的结构。您在 abs_perm(( 开头编写的内容对于标准编译器来说是不正确的(实际上您不知道数组的维度(。您可以使用 std::vector 或 std::list 来动态分配内存,或者(糟糕的解决方案(您可以分配一个维度肯定包含您将放入其中的所有元素的数组。