Цикл работает неправильно. Подробное объяснение в основной части

Требуется чтоб цикл k проходился по всем элементам и определял, есть ли число деленое на 1000 без остатка равное текущему значению currrent, если такое значение имеется, то current меняется местами с этим значением в массиве soldier , а затем приравнивается к 0. Проблема заключается в том, что цикл k проходит только по первому элементу, как сделать так , чтоб он проходился по всем ?

Само задание: Разработайте программу управления запасами для трех видов оборудования:

  • Шлем

  • Оружие

  • Броня

Каждый предмет имеет свойства:

  • Сила

  • ловкость

  • Интеллект

У солдата может быть только один предмет каждого типа. Входные данные задают предметы в ячейках склада и предметы, выдаваемые солдату со склада. Есть два случая, которые необходимо обработать:

  1.  Если у солдата нет снаряжения данного типа, он просто берет новый предмет.
    
  2.  Если у солдата есть снаряжение типа данного предмета, он берет новый предмет и возвращает свой старый предмет в первую пустую ячейку склада.
    

Программа должна вывести суммарное значение каждого свойства для всех предметов солдата.

Входные данные:

  1.  Массив целых чисел, в котором последовательные группы из четырех чисел описывают инвентарный предмет в ячейках склада:
    

1.1 Тип: отсутствует (0), шлем (1), оружие (2) или броня (3).

1.2 Сила.

1.3 Ловкость.

1.4 Интеллект.

Примечание: Инвентарный порядок предметов в ячейках склада - это порядок их прибытия.

  1.  Номер окончания -1.
    
  2.  Массив целых чисел, где каждое число определяет позицию ячейки в инвентаре, из которой предмет выдается солдату. Нумерация позиций начинается с 1.
    
  3.  Номер окончания -1.
    
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <iomanip>

using namespace std;
vector <int> convert4DigitNumber(vector <int>& soldier) {
    vector <int> properties;
    int strength = 0;
    int agility = 0;
    int intelligence = 0;
    int result_s = 0;
    int result_a = 0;
    int result_i = 0;
    for (size_t i = 0; i < soldier.size(); i++) {
        strength = soldier[i] / 100 %10;  //2250/100 = 22 %10 = 2
        agility = soldier[i] / 10 % 10;  // 2250/10 = 225 %10 = 5
        intelligence = soldier[i] % 10; // 2250 % 10 = 0

        result_s += strength;
        result_a += agility;
        result_i += intelligence;
    }
    properties.push_back(result_s);
    properties.push_back(result_a);
    properties.push_back(result_i);

    return properties;
    
}
vector <int> inventory_contol_func(vector <int>& warehouse, vector <int >& arr_cell) {
    vector <int> soldier;
    soldier.push_back(0);
    soldier.push_back(0);
    soldier.push_back(0);
    for (size_t i = 0; i < soldier.size(); i++) {
        int curI = i;
        for (size_t j = 0; j < arr_cell.size(); j++) {
            //1000 1500 1050 2055 0000 -1
            // 1 3 4 2 -1
            //2055 1500 0000 1015 2015 1505 -1
            // 1 4 2 5 -1
            int current = warehouse[arr_cell[j]];
            int curZero;
            if (i == 0) {
                if (current == 0) {
                    continue;
                }
                else {
                    int temp = soldier[i];
                    soldier[i] = current;
                    current = temp;
                    i++;
                    warehouse[arr_cell[j]] = 0;
                }
            }
            if (current == 0) {
                continue;
            }
            else {
                int curK = 0;
                for (size_t k = 0; k < i; k++) {

                    if (current / 1000 == soldier[k] / 1000 && current != 0) {

                        int cur = soldier[k];
                        int temp2 = soldier[k];
                        soldier[k] = current;
                        current = temp2;
                        current = 0;
                        warehouse[arr_cell[j]] = 0;

                        for (int t = 0; t < warehouse.size(); t++) {
                            if (warehouse[t] == 0) {
                                curZero = t;

                                int temp3 = warehouse[curZero];
                                warehouse[curZero] = cur;
                                cur = temp3;
                                break;
                            }
                        }
                    }
                    
                    else if (current / 1000 != soldier[k] / 1000 && current != 0) {

                        int temp = soldier[i];
                        soldier[i] = current;
                        current = temp;
                        i++;

                        warehouse[arr_cell[j]] = 0;
                    }
                }
            }
        }   
    }
   //vector <int> properties;
   //properties = convert4DigitNumber(soldier);
    return soldier;
}

int main()
{
    vector <int> warehouse;
    vector <int> arr_cell;
    vector <int> soldier;
   /// cout << "\nInput inventory number of item(consists of 4 numbers): ";
   // cout << "\n1 Type: absent (0), helmet (1), weapon (2), or armor (3)";
    //cout << "\n2. Strength.";
   // cout << "\n3. Agility.";
    //cout << "\n4. Intelligence.\n";
    int inventory_number;
    while (cin >> inventory_number) {
        if (inventory_number == -1) {
            break;
        }
        warehouse.push_back(inventory_number);
    }
    //cout << "\nInput  the cell’s position in the inventory";
    int n = warehouse.size();
    //cout << "\nThe number must be between from 1 to " << n << ":\n";
    int cell_position;
    while (cin >> cell_position) {
        
        if (cell_position == -1) {
            break;
        }
        if (cell_position < 0 || cell_position > n) {
            break;
        }
        cell_position -= 1;
        arr_cell.push_back(cell_position);

    }
    soldier = inventory_contol_func(warehouse, arr_cell);
    for (size_t i = 0; i < soldier.size(); i++) {
        cout << soldier[i] << setw(soldier.size());
    }
    return 0;
}

Ответы (0 шт):