Задача про быков и коров и Страуструпа, С++
Делаю код сам, конечно не идеальный, и проблема в том, что не могу вывести коров. Код перестает работать на 50 строчке (пишет ошибку 1748, связанную с векторами). Не понимаю, что не так, но проблема связана с этим кривым условием, которое придумал сам. (Первое число на скрине - загаданное компом, при этом цифры у этого числа соседние не могу повторяться, но если через раз или два, то могут)
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int p = 1;
while (p) {
int bull = 0;
int cow = 0;
int snum = 0;
srand(time(NULL));
vector <int>rand_num;
vector <int>num;
for (int i = 0; i < 4; ++i) {
int s = rand() % 10;
rand_num.push_back(s);
if (i != 0 && rand_num[i] == rand_num[i - 1]) {
rand_num.pop_back();
i = i - 1;
continue;
}
}
for (int k : rand_num) cout << k;
for (int u = 0; u < 4; ++u) {
cout << "\nEnter " << u + 1 << " digit ";
cin >> snum;
num.push_back(snum);
}
cout << "\nYour number is ";
for (int g : num) cout << g;
for (int j = 0; j < 4; ++j) {
if (rand_num[j] == num[j])
++bull;
/*50 строчка кода начинается*/
else if ((num[j] == rand_num[j + 1]) || (num[j] == rand_num[j + 2]) || (rand_num[j] == num[j + 3]) || (num[j] == rand_num[j - 1]) || (num[j] == rand_num[j - 2]) || (rand_num[j] == num[j - 3])) {
++cow;
}
}
if (bull == 4) {
cout << "You have won!" << endl;
p = 0;
}
cout << "\n\nBulls - " << bull;
cout << "\tCows - " << cow << endl;
}
}
Ответы (1 шт):
Ну смотрите сами — сколько вы помещаете элементов в вектора? По 4, так?
А обращаетесь к каким элементам?
for (int j = 0; j < 4; ++j) {
....
if ((num[j] == rand_num[j + 1]) || (num[j] == rand_num[j + 2]) ||
(rand_num[j] == num[j + 3]) || (num[j] == rand_num[j - 1]) ||
(num[j] == rand_num[j - 2]) || (rand_num[j] == num[j - 3])) {
При j==0 к какому элементу вы обращаетесь в num[j - 3]?
При j==3 к какому элементу вы обращаетесь в num[j + 3]?
Они у вас есть? С такими номерами? Да и с другими обращениями та же картина...
Вот и вся загадка...
