Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Micren
Статус: Студент
Рейтинг: 171
∙ повысить рейтинг >>
Лысков Игорь Витальевич
Статус: Профессионал
Рейтинг: 160
∙ повысить рейтинг >>
Николай // Programmator
Статус: Студент
Рейтинг: 141
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1231
от 03.02.2009, 03:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 477, Экспертов: 41
В номере:Вопросов: 2, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 159003: Пожалуйста, помогите селать эти задачи: Вопрос 1: Поле чудес: Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть зап...


Вопрос № 159021: У меня тут есть ещё 3 вопроса помогите, пожалуйста! Никак не получаеться! Пожалуйста, мне очень нужно!!! Вопрос 1: Нолики: Для заданных натуральных чисел N и K требуется вычислить количество чисел от 1 до N, имеющих в двоичной ...

Вопрос № 159.003
Пожалуйста, помогите селать эти задачи:
Вопрос 1:

Поле чудес:


Для игры в «Поле чудес» используется круглый барабан, разделенный на сектора, и стрелка. В каждом секторе записано некоторое число. В различных секторах может быть записано одно и то же число. Однажды ведущий игры решил изменить правила. Он сам стал вращать барабан и называть игроку (который барабана не видел) все числа подряд в том порядке, в котором на них указывала стрелка в процессе вращения барабана. Получилось так, что барабан сделал целое число оборотов, то есть последний сектор совпал с первым. После этого, ведущий задал участнику вопрос: какое наименьшее число секторов может быть на барабане? Требуется написать программу, отвечающую на этот вопрос ведущего.

Входные данные:
В первой строке входного файла INPUT.TXT записано число N – количество чисел, которое назвал ведущий (2 ≤ N ≤ 30000). Во второй строке записано N чисел, на которые указывала стрелка в процессе вращения барабана. Первое число всегда совпадает с последним (в конце стрелка указывает на тот же сектор, что и в начале). Числа, записанные в секторах барабана – натуральные, не превышающие 32000.

Выходные данные:
В выходной файл OUTPUT.TXT необходимо вывести одно число – минимальное число секторов, которое может быть на барабане.

Примеры:
1.
input.txt :
13
5 3 1 3 5 2 5 3 1 3 5 2 5
output.txt:
6

2.
inpu.txt:
4
1 1 1 1
output.txt:
1

3.
input.txt:
4
1 2 3 1
output.txt:
3

Вопрос 2 :

Скачки


Иван Иванович любит ходить на скачки, надеясь на них заработать кругленькую сумму. Ему приглянулась лошадь с номером 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» в противном случае.

Примеры :
1.
input.txt:
3 1
1 2
1 3
0
output.txt:
Yes

2.
input.txt:
3 2
2 3
0
output. txt:
No

3.
input.txt:
4 2
3 1
2 3
0
output.txt:
No

Спасибо!
Отправлен: 28.01.2009, 14:19
Вопрос задал: Alan alex ben (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Micren
Здравствуйте, Alan alex ben!
Программа 1
Код:

#include <locale>
#include <limits>
#include <iostream>
#include <fstream>

using namespace std;

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;
}


Программа 2
Код:

#include <locale>
#include <limits>
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

class dataexception:exception{};

// Класс "лошадь" для хранения более медленных коней
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);
}

void horse::addSlower(vector<unsigned int>& slower)
{
for(vector<unsigned int>::iterator it=slower.begin();it!=slower.end();it++)
addSlower(*it);
}

unsigned int horse::slowerCount() const
{
return _slower.size();
}

horse& findHorse(unsigned int num)
{
for(vector<horse>::iterator it=horses.begin();it!=horses.end();it++)
{
if(it->num()==num)return *it;
}
// Не нашли. Добавим.
horse h(num);
horses.push_back(h);
return horses[horses.size() -1];
}

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 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 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.

    примеры:

    1.
    input.txt:
    8
    output.txt:
    4

    2.
    input.txt:
    13
    output.txt:
    13

    Спасибо!

    Отправлен: 28.01.2009, 18:29
    Вопрос задал: Alan alex ben (статус: Посетитель)
    Всего ответов: 1
    Мини-форум вопроса >>> (сообщений: 1)

    Отвечает: Елисеев Андрей Александрович
    Здравствуйте, Alan alex ben!
    Мое решение первой задачи. Реализован в MS VisualStudio 2008 (но должно работать на всем)

    Приложение:

    Ответ отправил: Елисеев Андрей Александрович (статус: 1-й класс)
    Ответ отправлен: 29.01.2009, 00:23

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 242437 на номер 1151 (Россия) | Еще номера >>
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вы имеете возможность оценить этот выпуск рассылки.
    Нам очень важно Ваше мнение!
    Оценить этот выпуск рассылки >>

    Отправить вопрос экспертам этой рассылки

    Приложение (если необходимо):

    * Код программы, выдержки из закона и т.п. дополнение к вопросу.
    Эта информация будет отображена в аналогичном окне как есть.

    Обратите внимание!
    Вопрос будет отправлен всем экспертам данной рассылки!

    Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
    экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


    Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
    Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров >>

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RusFAQ.ru, Россия, Москва.
    Авторское право: ООО "Мастер-Эксперт Про"
    Техподдержка портала, тел.: +7 (926) 535-23-31
    Хостинг: "Московский хостер"
    Поддержка: "Московский дизайнер"
    Авторские права | Реклама на портале

    ∙ Версия системы: 5.13 от 01.12.2008

    Яндекс Rambler's Top100
    RusFAQ.ru | MosHoster.ru | MosDesigner.ru
    RusIRC.ru | Kalashnikoff.ru | RadioLeader.ru

    В избранное