С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
#1

Как убить негра(аналог легенды о Иосифе Флавии) - C++

16.04.2011, 15:38. Просмотров 1223. Ответов 6
Метки нет (Все метки)

Нашел в инэте следующую задачку:

Т.к. мне лень считать вручную, решил написать программу по этой задаче...
В вики нашел следующую формулу:

Вроде как написал под нее код, но он выводит неверное значение и в double(по другому логарифм не считается).
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <math.h>
main(){
    int n,m;
    std::cin >> n >> m;
    std::cout <<  m*(n-pow(2,log((double)n)))+1;
    return 0;
}
Подробнее о задаче здесь:http://ru.wikipedia.org/wiki/%D0%97%...B2%D0%B8%D1%8F
0
Миниатюры
Как убить негра(аналог легенды о Иосифе Флавии)  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2011, 15:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как убить негра(аналог легенды о Иосифе Флавии) (C++):

Как убить процесс? - C++
Как убить процесс с помощью программы(консольного приложения)?

Как убить std::thread? - C++
К сожалению мне так и не удалось найти информацию о том, как корректно убить std::thread в случае необходимости. Как правило, предлагают...

Как убить комп информатика? - C++
Как убить компьютер в кабинете информатики???

Легенда о Иосифе Флавии - Turbo Pascal
Существует легенда, что Иосиф Флавий - известный историк первого века - выжил и стал известным благодаря математической одаренности. В ходе...

Сессию нужно убить memberid нужно принудительно убить и страницы... как ? - C# ASP.NET
&lt;SCRIPT LANGUAGE=VBScript RUNAT=Server&gt; SUB Session_OnStart Session.Timeout = 3 Application.lock Application('visitors') =...

как убить? - Компьютерное железо
Нужно убить железа! Но как это сделать подскажите... Смерть должна выгядить естественным. Железо P2 Заранее спсибо

6
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.04.2011, 16:02  [ТС] #2
Есть, конечно, и другие способы, но хочется именно формулу.
Насколько я понимаю, неправильно вычисляется именно логарифм, возможно log() в качестве основания берет не 2?
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
16.04.2011, 16:23 #3
diagon, нет, разумеется, не 2. Это натуральный логарифм.
1
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.04.2011, 16:35  [ТС] #4
Странно... Заменил log на log2(должен такой быть в math.h), билдер такой функции не знает....
Попробовал также cmath.h, ничего не изменилось
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
16.04.2011, 16:38 #5
Если не ошибаюсь, это функция стандарта С99 (могу и ошибаться).
В любом случае, двоичный логарифм через натуральный получается так:
C++
1
double log2a = log(a) / log(2);
1
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.04.2011, 17:15  [ТС] #6
Что-то эта формула совсем мой мозг съела..
Точно знаю, что при n=10 и m=3 k будет равно 4.
Если подставить, то получится 3*(10-3^4)+1=-212...
Перепробовал все варианты, подставляя вместо m 2 и оставляя ее константой... 4, как ни крути, не выходит.
upd:эта формула, оказывается, выражена из этой
http://upload.wikimedia.org/math/f/9...d1a3d6950b.png

Добавлено через 7 минут
Все, разобрался.
0
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
16.04.2011, 17:15 #7
diagon, во-перывх, [n] - целая часть n, никаких округлений, поэтому в степени будет 3, а не 4 (это без учёта второго пункта ). Во-вторых, в формуле m фигурирует не только на месте множителя и основания степени, но так же и в основании логарифма. Т.е. должно быть 3 * (10 - 3 ^ [log3(10)]) + 1, что и будет равняться 4.
1
16.04.2011, 17:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2011, 17:15
Привет! Вот еще темы с ответами:

Как убить Android? - Android
Подскажите пожалуйста, есть ли какой то способ сделать так что бы телефон не загружал андроид(типа прошивка слетела или телефон сломался),...

Как в JS убить объект? - JavaScript
Есть ли в JS что-нть подобное бейсиковскому set s = Nothing

Как убить антивирус - Assembler
Обсуждения на тему как убивать антивирусы. Кто что знает пожалуйста пишите. Запрещено обсуждение создания вредоносного ПО

Как убить ошибку - Visual C++
LINK : fatal error LNK1146: no argument specified with option &quot;/libpath:&quot; - что за ошибка и что с ней делать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.