Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.04.2011, 15:38     Как убить негра(аналог легенды о Иосифе Флавии) #1
Нашел в инэте следующую задачку:

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

Вроде как написал под нее код, но он выводит неверное значение и в 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
Миниатюры
Как убить негра(аналог легенды о Иосифе Флавии)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2011, 15:38     Как убить негра(аналог легенды о Иосифе Флавии)
Посмотрите здесь:

как сделать аналог split(с#) на с++ C++
Как убить процесс порожденный _beginthread()? C++
C++ Как убить комп информатика?
Как убить std::thread? C++
Преобразование int в аналог этого числа как символ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.04.2011, 16:02  [ТС]     Как убить негра(аналог легенды о Иосифе Флавии) #2
Есть, конечно, и другие способы, но хочется именно формулу.
Насколько я понимаю, неправильно вычисляется именно логарифм, возможно log() в качестве основания берет не 2?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.04.2011, 16:23     Как убить негра(аналог легенды о Иосифе Флавии) #3
diagon, нет, разумеется, не 2. Это натуральный логарифм.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
16.04.2011, 16:35  [ТС]     Как убить негра(аналог легенды о Иосифе Флавии) #4
Странно... Заменил log на log2(должен такой быть в math.h), билдер такой функции не знает....
Попробовал также cmath.h, ничего не изменилось
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.04.2011, 16:38     Как убить негра(аналог легенды о Иосифе Флавии) #5
Если не ошибаюсь, это функция стандарта С99 (могу и ошибаться).
В любом случае, двоичный логарифм через натуральный получается так:
C++
1
double log2a = log(a) / log(2);
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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 минут
Все, разобрался.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2011, 17:15     Как убить негра(аналог легенды о Иосифе Флавии)
Еще ссылки по теме:

C++ Как разделить строку(аналог функции explode)
C++ Как убить процесс запускаемый spawnl

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
16.04.2011, 17:15     Как убить негра(аналог легенды о Иосифе Флавии) #7
diagon, во-перывх, [n] - целая часть n, никаких округлений, поэтому в степени будет 3, а не 4 (это без учёта второго пункта ). Во-вторых, в формуле m фигурирует не только на месте множителя и основания степени, но так же и в основании логарифма. Т.е. должно быть 3 * (10 - 3 ^ [log3(10)]) + 1, что и будет равняться 4.
Yandex
Объявления
16.04.2011, 17:15     Как убить негра(аналог легенды о Иосифе Флавии)
Ответ Создать тему
Опции темы

Текущее время: 08:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru