Массив ничего не печатает при выполнении кода - PullRequest
1 голос
/ 10 апреля 2020

Я создавал функцию, которая принимает целое число, находит следующий кратный 5 после числа, а затем, если разница между кратным и числом меньше 3, то она выводит кратное, а само число, наконец распечатывает массив всех чисел.

 #include <bits/stdc++.h>
 #include <iostream>

 using namespace std;


vector<int> gradingStudents(vector<int> grades) {
int size=grades.size();
int c=0;
int d;
vector<int> array;
for(int i=0;i<size;i++){

    while(grades[i]>(c*5)){
    c++;
    }
    d=c*5;

    if((d-grades[i])<3){
        array[i]=d;
    }else{
        array[i]=grades[i];
    }
    d=0;
    c=0;
}    
return array ;

Теперь я попытался запустить эту функцию, и компилятор не показывает ошибки в программе в коде, однако код ничего не печатает.

Кто-то Пожалуйста, помогите.

Ответы [ 3 ]

2 голосов
/ 10 апреля 2020

Во-первых, я должен сказать, что этот код крайне неэффективен. Найти разницу между ближайшим умножением 5 и числа можно просто:

int difference = (n - (n + 4) / 5 * 5) - n;

Объяснение: C ++ округляет деление, поэтому (n + 4) / 5 означает n / 5 округление в большую сторону и, следовательно, (n+4)/5*5 - это самое близкое умножение на 5.

Другое дело, вы объявляете массив, но никогда не изменяете его размер, поэтому его размер равен 0. Вам необходимо изменить его размер, указав размер в конструкторе или используя std::vector::resize метод.

код:

std::vector<int> gradingStudents(std::vector<int> grades) {
    std::size_t size = grades.size();
    std::vector<int> array(size);
    for (int i = 0; i < size; i++) {

        int closestMul = (grades[i] + 4) / 5 * 5;

        if (closestMul - grades[i] < 3) {
            array[i] = closestMul;
        }
        else {
            array[i] = grades[i];
        }
    }
    return array;
}
1 голос
/ 10 апреля 2020

Я чувствую, что с вашей функцией все в порядке, но вызов этой функции немного сложен, позвольте мне дать вам краткий обзор, который может вам помочь.

int main() {

    vector <int> test ;
    test.push_back(1);
    test.push_back(2);
    gradingStudents(test);
    return 0;
}

Сначала попробуйте размер вектор пуст, я надеюсь, что вы отправляете что-то из основного. Ваш код очень неэффективен, когда вы находите время, вы должны прочитать, как написать эффективный код.

1 голос
/ 10 апреля 2020

Вероятно, ваш код дает сбой, поэтому он ничего не печатает. И одна из причин его сбоя - неправильное использование вектора.

Очень часто новички пишут такой код

vector<int> array;
for (int i=0;i<size;i++) {
    array[i] = ...;

Но ваш вектор имеет нулевой размер . Поэтому array[i] всегда является ошибкой.

Два возможных решения

1) Сделайте вектор правильного размера, чтобы начать с

vector<int> array(size);
for (int i=0;i<size;i++) {
    array[i] = ...;

2) Используйте push_back чтобы добавить элементы к вектору, каждый раз, когда вы звоните push_back, вектор увеличивается в размере на единицу.

vector<int> array(size);
for (int i=0;i<size;i++) {
    array.push_back(...);

И, пожалуйста, не называйте ваш вектор array, это просто моча.

...