C/C++

Не могу понять в чем ошибка. Знатоки с++ помогите.

#include
#include
#include
#include
using namespace std;

int main() {

int size;
cin >> size;
int n;
cin >> n;

int max = 0;

vector a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
stable_sort(a.begin(), a.end());

bool para = true;

for (int i = 0; i < n; i++) {
if (a[i] >= size) {
int count = 1;
for (int j = i + 1; j < n; j++) {
int k=a[j-1];
if (a[j] - k >= 3) {

k = a[j];
count++;
}

}if (count >= max) {
max = count;
count = 0;
}
para = true;

}
else {
para = false;
}
}

if ((para == false)||(n==0)) {
cout << 0;
}
else {
cout << max;
}
return 0;
}

далее будут представлены тесты, которые он не проходит :
30
6
27 30 31 33 34 36
ответ 3 (у меня 1);

26
4
11 26 28 30
ответ 2 (у меня 1)

такое вот условие

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

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

Сначала вводится размер ноги покупателя (обувь меньшего размера он надеть не сможет), затем количество пар обуви в магазине и размер каждой пары. Размер — натуральное число, не превосходящее 100, количество пар обуви в магазине не превосходит 1000.

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

Выведите единственное число — максимальное количество пар обуви.

введеные значения:

26
5
30 35 40 41 42
ответ
3
У вас очень много ошибок
int k = a[j - 1]; - у вас внутри цикла, а должно быть снаружи и начальное значение л = a[i]
count = 0; - не имеет смысла, т. к. у вас каждый раз инициируется 1 чуть раньше
bool para - бессмысленная переменная, т. к. в max у вас в конце будет количество пар, его и нужно просто вывести, а условие else {para = false;} - как раз и срабатывает некорректно, что приводит в вашем случае в конце к выводу нуля, а не max
if ((para == false)||(n==0)) - почему n==0? это же просто количество пар обуви в магазине
para == false - так не пишут, пишут: !para
k = a[j]; - внутри цикла по j, почему так? ведь следующий подходящий размер в магазине может быть намного больше, чем минимально допустимый, вы потеряете много пар, нужно прибавлять 3

Переписал:

#include< iostream >
#include< vector >

using namespace std;

int main() {

int size;
cin >> size;
int n;
cin >> n;

int max = 0;

vector< int > a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
stable_sort(a.begin(), a.end());

for (int i = 0; i < n; i++) {
if (a[i] >= size) {
int count = 1;
int k = a[i];
for (int j = i + 1; j < n; j++) {
if (a[j] - k >= 3) {
k += 3;
count++;
}
}
if (count >= max) {
max = count;
}
}
}
cout << max << endl;
return 0;
}
Виктор Леньшин
Виктор Леньшин
55 095
Лучший ответ
сортируешь. Потом одним циклом пробегаешься по массиву. Если элемент больше либо равен size то увеличиваешь счетчик на единицу, а в size записываешь этот элемент плюс 3.
все.
cnt = 0; for (auto el : v) if (el >= size) {cnt++; size = el +3;}
Н=
Ник =)
25 445
Виталий Чекушкин В таком случае даже сортировка может быть излишней!