Цикл работает неправильно. Подробное объяснение в основной части
Требуется чтоб цикл k проходился по всем элементам и определял, есть ли число деленое на 1000 без остатка равное текущему значению currrent, если такое значение имеется, то current меняется местами с этим значением в массиве soldier , а затем приравнивается к 0. Проблема заключается в том, что цикл k проходит только по первому элементу, как сделать так , чтоб он проходился по всем ?
Само задание: Разработайте программу управления запасами для трех видов оборудования:
Шлем
Оружие
Броня
Каждый предмет имеет свойства:
Сила
ловкость
Интеллект
У солдата может быть только один предмет каждого типа. Входные данные задают предметы в ячейках склада и предметы, выдаваемые солдату со склада. Есть два случая, которые необходимо обработать:
-
Если у солдата нет снаряжения данного типа, он просто берет новый предмет. -
Если у солдата есть снаряжение типа данного предмета, он берет новый предмет и возвращает свой старый предмет в первую пустую ячейку склада.
Программа должна вывести суммарное значение каждого свойства для всех предметов солдата.
Входные данные:
-
Массив целых чисел, в котором последовательные группы из четырех чисел описывают инвентарный предмет в ячейках склада:
1.1 Тип: отсутствует (0), шлем (1), оружие (2) или броня (3).
1.2 Сила.
1.3 Ловкость.
1.4 Интеллект.
Примечание: Инвентарный порядок предметов в ячейках склада - это порядок их прибытия.
-
Номер окончания -1. -
Массив целых чисел, где каждое число определяет позицию ячейки в инвентаре, из которой предмет выдается солдату. Нумерация позиций начинается с 1. -
Номер окончания -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;
}