Вопрос № 159003: Пожалуйста, помогите селать эти задачи: Вопрос 1: Поле чудес: Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть зап...
Вопрос № 159021: У меня тут есть ещё 3 вопроса помогите, пожалуйста! Никак не получаеться! Пожалуйста, мне очень нужно!!! Вопрос 1: Нолики: Для заданных натуральных чисел N и K требуется
вычислить количество чисел от 1 до N, имеющих в двоичной ...
Вопрос № 159.003
Пожалуйста, помогите селать эти задачи: Вопрос 1:
Поле чудес:
Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан
сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.
Входные данные: В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе
вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.
Выходные данные: В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.
Иван Иванович любит ходить на скачки, надеясь на них заработать кругленькую сумму. Ему приглянулась лошадь с номером K, и он решил проверить, сможет ли она выиграть у всех остальных лошадей. Иван Иванович раздобыл информацию, в которой для некоторых пар лошадей сообщается, какая из этих лошадей быстрее. Также он узнал, что у всех лошадей разные скорости.
Требуется написать прогр
амму, которая поможет Ивану Ивановичу точно определить может ли выиграть выбранная им лошадь. Входные данные
Входной файл INPUT.TXT содержит в первой строке два целых числа N (1 <= N <= 100) и K (1 <= K <= N), где N – количество лошадей, принимающих участие в скачках, K – номер лошади, на которую хочет сделать ставку Иван Иванович. Следующие строки содержат по два числа X и Y (1 <= X, Y <= N), обозначающие, что лошадь с номером X быстрее лошади с номером Y. Пары X и Y не повторяются.
Набор данных завершается строкой, содержащей единственный ноль. Эту строку обрабатывать не надо.
Гарантируется, что информация, раздобытая Иваном Ивановичем, корректна.
Выходные данные
Выходной файл OUTPUT.TXT должен содержать слово «Yes», если Иван Иванович уверен в своем выигрыше и «No» в противном случае.
int main() { locale::global(locale("rus_rus.1251")); wcout<<L"Имя
входного файла:"; wstring ifname; getline(wcin,ifname); wifstream in(ifname.c_str()); if(in) { wcout<<L"Имя выходного файла:"; wstring ofname; getline(wcin,ofname); wofstream out(ofname.c_str()); if(out) { unsigned int N; in>>N; in.ignore(numeric_limits<streamsize>::max(),L'
'); try { unsigned int *data=new unsigned int[N]; for(unsigned int i=0;i<N;i++)in>>data[i]; // Предполагаемое количество секторов unsigned int count; for(count=1;count<N-1;count++) { // Должно быть кратно предполагаемому количеству секторов // Это можно и не делать. Но это поможет исключить ненужные проверки if(!((N-1)%count)) { // Собственно сама проверка for(unsigned int j=count;j<N-1;) { for(unsigned
int i=0;i<count;i++,j++) if(data[i]!=data[j])goto is_not_it; } // Если дошло до конца то найдено break; } is_not_it:; } delete []data; wcout<<L"Минимальное количество секторов:"<<count<<endl; out<<count<<endl; } catch(bad_alloc) { wcout<<L"Не могу выделить память для массива"<
<endl; } out.close(); } else wcout<<L"Не могу открыть файл:"<<ofname<<endl; in.close(); } else wcout<<L"Не могу открыть файл:"<<ifname<<endl; system("PAUSE"); return 0; }
// Класс "лошадь" для хранения более медленных коней class horse { public: horse(unsigned int num); unsigned int num() const; // Добавляет более медленную лошадь к
списку void addSlower(unsigned int num); void addSlower(vector<unsigned int>& slower); unsigned int slowerCount() const; private: unsigned int _num; vector<unsigned int> _slower; friend horse checkHorse(unsigned int horsenum,unsigned int max); };
// Здесь будут храниться найденные во входных данных лошади vector<horse> horses;
// Ищет в horses лошадь с номером. Если не находит-добавляет horse& findHorse(unsigned int num);
// Возвращает
лошадь со списком всех более медленных лошадей horse checkHorse(unsigned int horsenum,unsigned int max);
int main() { locale::global(locale("rus_rus.1251")); wcout<<L"Имя входного файла:"; wstring ifname; getline(wcin,ifname); wifstream in(ifname.c_str()); if(in) { wcout<<L"Имя выходного файла:"; wstring ofname; getline(wcin,ofname); wofstream out(ofname.c_str());
if(out) { try { unsigned int N,rate; in>>N>>rate; if(in.fail())throw dataexception(); in.ignore(numeric_limits<streamsize>::max(),L'
'); // Читаем из файла и заносим в список while(!in.eof()) { unsigned int quick,slow; in>>quick; if(in.fail())throw dataexception(); if(quick) { in>>slow; if(in.fail())throw dataexception(); findHorse(quick).addSlower(slow); } else break; } // Проверяем horse rhorse=checkHorse(rate,N); wstring res; // Количество более медленных должно быть на единицу меньше if(rhorse.slowerCount()==N-1)res=L"Yes";else
res=L"No"; // Выводим результат wcout<<res<<endl; out<<res<<endl; } catch(dataexception) { wcout<<L"Ошибка в данных"<<endl; } out.close(); } else wcout<<L"Не могу открыть файл:"<<ofname<<endl; in.close(); } else wcout<<L"Не могу открыть
файл:"<<ifname<<endl; system("PAUSE"); return 0; }
horse::horse(unsigned int num) :_num(num) {}
unsigned int horse::num() const { return _num; }
void horse::addSlower(unsigned int num) { vector<unsigned int>::iterator it=find(_slower.begin(),_slower.end(),num); // Добавляем только если нет в списке if(it==_slower.end())_slower.push_back(num); }
horse checkHorse(unsigned int horsenum,unsigned int max) { horse h=findHorse(horsenum); // Исключение, если во входных данных есть закольцованные места if(max==0)throw dataexception(); else { // Иначе добавляем для выбранной лошади в список более медленных for(unsigned int i=0;i<h._slower.size();i++) h.addSlower(checkHorse(h._slower[i],max-1)._slower); } return h; }
Логика работы программ не сложна. Сложнее додуматься
до этого.
Ответ отправил: Micren (статус: Студент)
Ответ отправлен: 28.01.2009, 22:25
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 242424 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 159.021
У меня тут есть ещё 3 вопроса помогите, пожалуйста! Никак не получаеться! Пожалуйста, мне очень нужно!!!
Вопрос 1:
Нолики: Для заданных натуральных чисел N и K требуется вычислить количество чисел от 1 до N, имеющих в двоичной записи ровно K нулей.
Например, если N=8 и K=1, то мы можем записать все числа от 1 до 8 в двоичной системе счисления:
1, 10, 11, 100, 101, 110, 111 и 1000.
Откуда видно, что только числа 10, 101 и 110 имеют ровно один ноль в записи, т.е.
правильный ответ – 3.
Входные данные В единственной строке входного файла INPUT.TXT записано два натуральных числа через пробел N и K, не превышающих 109.
Выходные данные В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — количество чисел от 1 до N с K нулями в двоичном представлении.
примеры: 1. input.txt: 8 1 output.txt: 3
2. input.txt: 13 2 output.txt: 4
3. input.txt
: 1000 5 output.txt: 210
Вопрос 2:
Марсианские факториалы:
В 3141 году очередная экспедиция на Марс обнаружила в одной из пещер таинственные знаки. Они однозначно доказывали существование на Марсе разумных существ. Однако смысл этих таинственных знаков долгое время оставался неизвестным. Недавно один из ученых, профессор Очень-Умный, заметил один интересный факт: всего в надписях, составленных из этих знаков, встречается ровно K различных символов. Более того, все надписи
заканчиваются на длинную последовательность одних и тех же символов.
Вывод, который сделал из своих наблюдений профессор, потряс всех ученых Земли. Он предположил, что эти надписи являются записями факториалов различных натуральных чисел в системе счисления с основанием K. А символы в конце – это конечно же нули – ведь, как известно, факториалы больших чисел заканчиваются большим количеством нулей. Например, в нашей десятичной системе счисления факториалы заканчива
ются на нули начиная с 5! = 1·2·3·4·5 = 120. А у числа 100! в конце следует 24 нуля в десятичной системе счисления и 48 нулей в системе счисления с основанием 6 – так что у предположения профессора есть разумные основания!
Теперь ученым срочно нужна программа, которая по заданным числам N и K найдет количество нулей в конце записи в системе счисления с основанием K числа N! = 1·2·3·…·(N-1)·N, чтобы они могли проверить свою гипотезу. Вам придется написать
им такую программу!
Входные данные Входной файл INPUT.TXT содержит числа N и K, разделенные пробелом. (1<=N<=109, 2<=K<=1000).
Выходные данные Выведите в выходной файл OUTPUT.TXT число X - количество нулей в конце записи числа N! в системе счисления с основанием K.
примеры:
1. input.txt: 5 10 output.txt: 1
2. input.txt: 100 10 output.txt: 24
3. input.txt: 100 6 output.txt: 48
4. input.txt: 3 10 output.txt: 0
Вопрос 3: Степень: Для того чтобы проверить, как её ученики умеют считать, Мария Ивановна каждый год задаёт им на дом одну и ту же задачу – для заданного натурального A найти минимальное натуральное N такое, что N в степени N (N, умноженное на себя N раз) делится на A. От года к году меняется только число A.
Вы решили помочь будущим поколениям. Для этого вам необходимо написать программу, решающую эту задачу.
Входные данные Во
входном файле INPUT.TXT содержится единственное число A (1 ≤ A ≤ 109 – на всякий случай, вдруг Мария Ивановна задаст большое число, чтобы «завалить» кого-нибудь…).
Выходные данные В выходной файл OUTPUT.TXT необходимо вывести единственное число N.
Отвечает: Елисеев Андрей Александрович
Здравствуйте, Alan alex ben! Мое решение первой задачи. Реализован в MS VisualStudio 2008 (но должно работать на всем)
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.