来自Hackerrank的带有向量的c ++可变大小数组

时间:2018-09-26 20:44:40

标签: c++ c++11 vector

我想解决Hackerrank上一个名为“可变大小数组”的难题,我想使用矢量来做到这一点。我编写的代码无法正常运行,我尝试对其进行调试,但结果无济于事。我会很感激的 这是挑战:

  

考虑一个n元素数组,其中数组中的每个索引i都包含对整数数组的引用K i (其中K i 因阵列而异)。有关图表,请参见下面的“说明”部分。

     

鉴于a,您必须回答q个查询。每个查询的格式为i j,其中i表示数组中的索引,j表示数组中位于a [i]处的索引。对于每个查询,在新行的位置找到并打印数组中元素j的值。

     

输入格式

     

第一行包含两个以空格分隔的整数,分别表示n(可变长度数组的数量)和q(查询的数量)的值。   后续各行中的每一行都包含以k a [i] 0 a [i] 1…a [i] k-1格式隔开的序列,该序列描述了位于a [i]处的k元素数组。   随后的q行中的每一行都包含两个以空格分隔的整数,分别描述用于查询的i(数组a中的索引)和j(数组中a [i]所引用的索引)的值。

     

样本输入
  2 2
  3 1 5 4
  5 1 2 8 9 3
  0 1
  1 3

     

样本输出
  5
  9

所以这是我的代码(我将把它留给调试用):

#include <iostream>
#include <vector>
using std::cin;
using std::cout;
using std::vector;
using std::endl;

int main() {

    int numberOfQueries = 0;
    int numberOfArrays = 0;
    cout << "Enter Nr.Of Arrays followed by Nr.Of Queries:";
    cin >> numberOfArrays >> numberOfQueries;
    cout << "Nr.Of Arrays: " << numberOfArrays << endl;
    cout << "Nr.Of Queries: " << numberOfQueries << endl;
    vector<vector<int>>multiArray;
    cout << "MultiArray size: " << multiArray.size();
    while (numberOfArrays != 0) {
        int vsize = 0;
        cout << "\nenter array starting by its size: ";
        cin >> vsize;
        cout << " Size entered  is: " << vsize << endl;
        vector<int> vec1(vsize);
        cout << "Array Size is: " << vec1.size() << endl;
        //int element = 0;
        while (cin >> vsize) {
            cout << "Element is: " << vsize << "\n";
            vec1.push_back(vsize);
        };
        multiArray.push_back(vec1);
        numberOfArrays--;
        cout << "MultiArray size: " << multiArray.size();
        cout << "Nr.Of Arrays: " << numberOfArrays << endl;
    };
    while (numberOfQueries > 0) {
        int i = 0, j = 0;
        cout << "\nQuery indexes:";
        cin >> i >> j;
        cout << multiArray[i][j];
        numberOfQueries--;
    }
}

5 个答案:

答案 0 :(得分:0)

    while (cin >> vsize) {
        cout << "Element is: " << vsize << "\n";
        vec1.push_back(vsize);
    };

应该类似于

    for (int i = 0; i < vsize; ++i) {
        int elem;
        cin >> elem;
        cout << "Element is: " << elem << "\n";
        vec1.push_back(elem);
    }

while (cin >> vsize)不会停止请求输入,直到您收到文件结尾或错误。但是您知道需要多少输入,因此可以在for循环中进行编码。

答案 1 :(得分:0)

我的答案。

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

int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    int n,q;
    cin >> n >> q ;

    vector<int> a[n];

    int k;
    for(int i = 0; i < n; i++)
    {
        cin >> k; 
        for (int j = 0; j < k; j++)
        {
            int val_a_i_j;
            cin >> val_a_i_j;
            a[i].push_back(val_a_i_j);
        }
    };

    for (int i = 0; i < q; i++)
    {
        int a_i, j;
        cin >> a_i >> j;
        cout << a[a_i][j] << '\n';
    }

    return 0;
}

答案 2 :(得分:0)

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

int main() {
    int a , b;
    cin >> a >> b;
    vector<int> arr[a];
    for(int i= 0 ; i < a ; i++)
    {
       int m;
       cin >> m;
       int o;
       for(int j=0;j<m;j++)
       {
          cin >> o;
          arr[i].push_back(o);
       }
    }
    int r,s;
    for(int k=1;k<b;k++)
    {
      cin>>r>>s;
      cout <<a[r][s]<< endl;
    }
    return 0;
}

答案 3 :(得分:0)

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


int main() 
{
    int n, q;
    cin >> n >> q;
    vector<int>* a;
    a= new vector<int>[n];
    int p;
    int k;
    for (p = 0;p < n;p++) {
        cin >> k;
        for (int i = 0; i < k; i++) {
            int o;
            cin >>o;
            a[p].push_back(o);
        }
    }
    int r, s;
    for (p = 0;p < q;p++)
    {
        cin >> r >> s;
        cout << a[r][s]<<endl;
    }
    return 0;

}

答案 4 :(得分:0)

此问题与处理向量的向量有关。

int main() {
  
    int n,q;
    cin>>n>>q;
    vector<vector<int> > a;//creating vectors of vector
    int k;

    for (int i = 0; i < n; i++)
    {
        cin >>k;
        vector <int> row; // creating vector

        for (int j = 0; j < k; j++)
        {
            int val;
            cin>> val;
            row.push_back(val);
        }
        a.push_back(row);
    }
    
    for (int l=0; l < q; l++)
    {
       int i,j;
       cin>>i>>j;
       // checking boundary conditions
       if ((i >= 0 && i < a.size() ) && (j >=0 && j < a[i].size()))
       {
          cout<<a[i][j]<<endl;
       }
      
    } 
    return 0;
}