Автор | Сообщение |
|
Отправлено: 19.02.12 10:55. Заголовок: C4 Сейф и драгоценные камни
Условие следующее: цитата: | Завод по огранке драгоценных камней приобрел сейф повышенной надежности. Для определения драгоценных камней, которые необходимо положить в сейф, сначала отбираются 10% самых дорогих камней. Если у самого дешевого камня из вошедших в группу 10% самых дорогих оказывается ценовая категория такая же, как и у нескольких других, то эти камни тоже включаются в группу камней для размещения в сейфе повышенной надежности в том случае, если их ценовая категория не менее 25. Написать программу, которая по результатам входных данных будет определять, какую минимальную цену должен иметь драгоценный камень, чтобы его поместили в сейф повышенной надежности. На вход программе сначала подается общее количество N камней на складе. В каждой из следующих N строк находится информация по каждому камню отдельно в следующем формате: <Название драгоценного камня> < Код> < Ценовая категория> , <Название драгоценного камня> - строка, состоящая не более чем из 20 символов, <Код> - строка, состоящая не более чем из 20 символов, <Ценовая категория> – целое число от 1 до 30. <Название драгоценного камня>, <Код> и <Ценовая категория> разделены одним пробелом. Пример входной строки: Изумруд И5674 11 Программа должна выводить минимальную <Ценовую категорию> драгоценного камня, который необходимо положить в сейф повышенной надежности |
|
. Моё решение #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; } Является ли оно верным? Для чего нужно условие из второго абзаца(выделен красным)? Как решать задачу, если брать в расчёт тот факт, что камней может быть меньше 10(т.е. 10%-это меньше, чем 1 камень)? Спасибо.
|
|
|
Ответов - 5
[только новые]
|
|
|
| Администратор
|
Сообщение: 112
|
|
Отправлено: 19.02.12 21:13. Заголовок: PavelG пишет: Являет..
PavelG пишет: Не совсем. По крайней мере, там есть неточности. Чего стоит один оператор Count+=A. Конечно, понятно, что имелось в виду, но на ЕГЭ за это снизят оценку. цитата: | Для чего нужно условие из второго абзаца(выделен красным)? |
|
Вы учли это условие - если, допустим, нужно отобрать 10 камней из 100, и есть 8 камней категории 30 и 5 камней категории 29, то должны быть отобраны все эти 13 камней. цитата: | Как решать задачу, если брать в расчёт тот факт, что камней может быть меньше 10(т.е. 10%-это меньше, чем 1 камень)? |
|
Предположу, что так же, как у вас, это единственный разумный вариант.
|
|
|
|
Отправлено: 19.02.12 23:03. Заголовок: По крайней мере, там..
цитата: | По крайней мере, там есть неточности. Чего стоит один оператор Count+=A. |
| Вы имели ввиду, что нужно Count+=A| i |(скобки вместе с индексом почему-то не хотят показываться )?
|
|
|
|
| Администратор
|
Сообщение: 113
|
|
Отправлено: 20.02.12 05:28. Заголовок: PavelG пишет: Вы име..
PavelG пишет: цитата: | Вы имели ввиду, что нужно Count+=A| i |(скобки вместе с индексом почему-то не хотят показываться )? |
|
Да, конечно. Скобки с индексом не хотят показываться, потому запись [ i ] означает начало блока, выделенного курсивом (так и получилось!). Нужно поставить пробелы слева и справа от "i" или сменить переменную - вместо "i" взять, скажем, "k".
|
|
|
|
Отправлено: 26.02.12 22:35. Заголовок: Со своим вариантом р..
Со своим вариантом решения я разобрался, но возникла другая проблема. Условие: цитата: | Если у самого дешевого камня из вошедших в группу 10% самых дорогих оказывается ценовая категория такая же, как и у нескольких других, то эти камни тоже включаются в группу камней для размещения в сейфе повышенной надежности в том случае, если их ценовая категория не менее 25. |
| толкуется авторами книги, откуда взята задача, по-другому(если часть камней входящих в 10% категорией ниже 25, и в то же время есть ещё камни такой же ценовой категории, то ни те, ни другие не откладываются в сейф(данный вывод сделан из готового решения)). Возможно ли такая, на мой взгляд, двусмысленность в задаче на реальном экзамене? Если да, то как действовать в подобных ситуациях? Спасибо.
|
|
|
|
| Администратор
|
Сообщение: 131
|
|
Отправлено: 26.02.12 23:02. Заголовок: PavelG пишет: Возмож..
PavelG пишет: цитата: | Возможно ли такая, на мой взгляд, двусмысленность в задаче на реальном экзамене? Если да, то как действовать в подобных ситуациях? |
|
Не знаю. Очень надеюсь, что нет, все-таки все "боевые" варианты проверяются грамотными людьми. В случае чего - действовать по обстановке. :-)
|
|
|
|