c ++ массивы переменного размера от Hackerrank с векторами - PullRequest
0 голосов
/ 26 сентября 2018

Я хотел решить задачу под названием «Массивы переменного размера» на Hackerrank, и я хотел сделать это, используя векторы.Код, который я написал, не работает должным образом, и я попытался отладить его, но ничего не получилось.Я буду благодарен за вот этот вызов:

Рассмотрим массив из n элементов, где каждый индекс i в массиве содержит ссылку K i на массивцелые числа (где значение K i варьируется от массива к массиву).См. Пояснение в разделе ниже для диаграммы.

Учитывая, вы должны ответить на q запросов.Каждый запрос имеет формат ij, где i обозначает индекс в массиве, а j обозначает индекс в массиве, расположенном в [i].Для каждого запроса найдите и распечатайте значение элемента j в массиве в месте на [i] новой строке.

Формат ввода

Первая строка содержит два разделенных пробелом целых числа, обозначающихсоответствующие значения n (количество массивов переменной длины) и q (количество запросов).Каждая строка последующих строк содержит разделенную пробелами последовательность в формате ka [i] 0 a [i] 1… a [i] k-1, описывающую массив k-элементов, расположенный в a [i].Каждая из q последующих строк содержит два разделенных пробелом целых числа, описывающих соответствующие значения i (индекс в массиве a) и j (индекс в массиве, на который ссылается a [i]) для запроса.

Пример ввода2 23 1 5 45 1 2 8 9 30 11 3

Пример вывода59

Итак, вот мой код для этого (я оставлю это с отсеками для отладки):

#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--;
    }
}

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Мой ответ.

#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;
}
0 голосов
/ 27 июня 2019
#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;
}
0 голосов
/ 27 сентября 2018
    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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...