#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
C/C++
Не могу понять в чем ошибка. Знатоки с++ помогите.
У вас очень много ошибок
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;
}
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;
}
сортируешь. Потом одним циклом пробегаешься по массиву. Если элемент больше либо равен size то увеличиваешь счетчик на единицу, а в size записываешь этот элемент плюс 3.
все.
cnt = 0; for (auto el : v) if (el >= size) {cnt++; size = el +3;}
все.
cnt = 0; for (auto el : v) if (el >= size) {cnt++; size = el +3;}
Виталий Чекушкин
В таком случае даже сортировка может быть излишней!
Похожие вопросы
- Программирование, не могу понять ошибка моя или компилятора.
- Помогите понять в чём ошибка в С++
- С++ Не могу понять где ошибка. Пишет: Программа выводит ответ в неверном формате. Вот код :
- Выдаёт ошибку в коде.Помогите
- C++,помогите срочно!!! Ни как не могу понять как решить данную задачу
- Кто поможет в языке Си, с массивом. Не могу понять как сделать
- Помогите не могу понять Python
- Ошибка в программе, помогите исправить.
- Задача на структуры данных, очереди и стек, не могу понять что делаю нет так?
- Никак не могу понять применение операции NEW и DELETE.