Форум » Обработка числовых последовательностей » C4 Сейф и драгоценные камни » Ответить

C4 Сейф и драгоценные камни

PavelG: Условие следующее: [quote]Завод по огранке драгоценных камней приобрел сейф повышенной надежности. Для определения драгоценных камней, которые необходимо положить в сейф, сначала отбираются 10% самых дорогих камней. Если у самого дешевого камня из вошедших в группу 10% самых дорогих оказывается ценовая категория такая же, как и у нескольких других, то эти камни тоже включаются в группу камней для размещения в сейфе повышенной надежности в том случае, если их ценовая категория не менее 25. Написать программу, которая по результатам входных данных будет определять, какую минимальную цену должен иметь драгоценный камень, чтобы его поместили в сейф повышенной надежности. На вход программе сначала подается общее количество N камней на складе. В каждой из следующих N строк находится информация по каждому камню отдельно в следующем формате: <Название драгоценного камня> < Код> < Ценовая категория> , <Название драгоценного камня> - строка, состоящая не более чем из 20 символов, <Код> - строка, состоящая не более чем из 20 символов, <Ценовая категория> – целое число от 1 до 30. <Название драгоценного камня>, <Код> и <Ценовая категория> разделены одним пробелом. Пример входной строки: Изумруд И5674 11 Программа должна выводить минимальную <Ценовую категорию> драгоценного камня, который необходимо положить в сейф повышенной надежности[/quote]. Моё решение [pre2] #include<iostream> #include<string.h> using namespace std; const int M=30; int main() { int A[M]={0};//массив для подсчёта камней всех возможных категорий char buff[21];//ввод ненужной информации о камне int i,N; int per,Cost,Count;//10% от N,ячейка для ввода цены очередного камня,набор в сейф scanf("%d",&N); for(i=0;i<N;i++) { scanf("%s%s%d",&buff,&buff,&Cost); A[Cost-1]++; } per=N*0.1; Count=0; for(i=M-1;Count!=per;i--)//идём с конца, пока не наберём нужное число камней Count+=A[ i ]; printf("min cost=%d\n",i+1); return 0; }[/pre2]Является ли оно верным? Для чего нужно условие из второго абзаца(выделен красным)? Как решать задачу, если брать в расчёт тот факт, что камней может быть меньше 10(т.е. 10%-это меньше, чем 1 камень)? Спасибо.

Ответов - 5

Поляков: PavelG пишет: Является ли оно верным? Не совсем. По крайней мере, там есть неточности. Чего стоит один оператор Count+=A. Конечно, понятно, что имелось в виду, но на ЕГЭ за это снизят оценку.Для чего нужно условие из второго абзаца(выделен красным)? Вы учли это условие - если, допустим, нужно отобрать 10 камней из 100, и есть 8 камней категории 30 и 5 камней категории 29, то должны быть отобраны все эти 13 камней.Как решать задачу, если брать в расчёт тот факт, что камней может быть меньше 10(т.е. 10%-это меньше, чем 1 камень)? Предположу, что так же, как у вас, это единственный разумный вариант.

PavelG: По крайней мере, там есть неточности. Чего стоит один оператор Count+=A. Вы имели ввиду, что нужно Count+=A| i |(скобки вместе с индексом почему-то не хотят показываться )?

Поляков: PavelG пишет: Вы имели ввиду, что нужно Count+=A| i |(скобки вместе с индексом почему-то не хотят показываться )? Да, конечно. Скобки с индексом не хотят показываться, потому запись [ i ] означает начало блока, выделенного курсивом (так и получилось!). Нужно поставить пробелы слева и справа от "i" или сменить переменную - вместо "i" взять, скажем, "k".


PavelG: Со своим вариантом решения я разобрался, но возникла другая проблема. Условие: Если у самого дешевого камня из вошедших в группу 10% самых дорогих оказывается ценовая категория такая же, как и у нескольких других, то эти камни тоже включаются в группу камней для размещения в сейфе повышенной надежности в том случае, если их ценовая категория не менее 25. толкуется авторами книги, откуда взята задача, по-другому(если часть камней входящих в 10% категорией ниже 25, и в то же время есть ещё камни такой же ценовой категории, то ни те, ни другие не откладываются в сейф(данный вывод сделан из готового решения)). Возможно ли такая, на мой взгляд, двусмысленность в задаче на реальном экзамене? Если да, то как действовать в подобных ситуациях? Спасибо.

Поляков: PavelG пишет: Возможно ли такая, на мой взгляд, двусмысленность в задаче на реальном экзамене? Если да, то как действовать в подобных ситуациях? Не знаю. Очень надеюсь, что нет, все-таки все "боевые" варианты проверяются грамотными людьми. В случае чего - действовать по обстановке. :-)



полная версия страницы