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

Оптимизация вычислений - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++ http://www.cyberforum.ru/cpp-beginners/thread517156.html
#include <iostream> #include <math.h> using namespace std; int main(){ double x,a,abs; cout<<"input a: "<<endl; cin>>a; x=abs(a); cout<<"x="<<x<<endl; return 0;
C++ программа вылетает. привет всем! я новичок. программа ошибок не выдаёт. После ввода всех переменных программа вылетает я не успеваю увидеть ответ. вот он код: #include <iostream> using namespace std; int main ()... http://www.cyberforum.ru/cpp-beginners/thread517153.html
Сравнение кол-ва слов в строке и сопоставление аналогичной строке. C++
Добрый день. У меня есть 2 разных текста в richtextbox1 и richtextbox2, каждое предложение начинается с новой строки. Задача заключается в том, чтобы выполнялся подсчет количества слов в каждой...
stl vector или ограниченный массив C++
Скажите пожалуйста целесообразно ли использовать вектор структур с весом 100 байт и размером вектора не больше 10, а так же использовать функцию erase(). Или лучше задать массив таких структур...
C++ не могу найти ошибку в кодировании Хаффмана http://www.cyberforum.ru/cpp-beginners/thread517142.html
занимаюсь сжатием Jpeg написала почти все, теперь начинаю проверять на программе JPEGsnoop с помощью МОЕЙ программы строю дерево хаффмана для значений int **MASS_DEREVO_Diff_CrCb;...
C++ не разрешённый символ в функции GetForegroundWindow(); Всем привет! возникла такая проблема: строчка HWND wnd = GetForegroundWindow(); в консольном приложении работает нормально, а вот когда пишу тот же самый код в WindosForm, то возникают ошибки: ... подробнее

Показать сообщение отдельно
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.03.2012, 19:19
Я как-то писал подобную задачу для чисел от 10^9 до 10^10, но максимум, чего я достиг - 2 минуты. До 10^16 вообще сложно перебирать, даже если цикл будет пустым, то работать будет очень долго.
P.S. ваш вариант можно оптимизировать, если вычислять сумму получившего числа за O(1), и автоматически отсекать лишние циклы, когда эта сумма становится больше требуемой.

Добавлено через 8 минут
Вот, примерно так.
Только вместо массива я макрос использовал, за секунду отрабатывает, причем почти все время на вывод уходит.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
 
#define FOR(x, l, code)                                 \
    for ( a##x = l; a##x <= 9 && sum <= 10 ; ++a##x )   \
    {                                                   \
        sum += a##x;                                    \
        code                                            \
        sum -= a##x;                                    \
    }           
    
 
 
int main()
{   
    int sum = 0;
    int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
    
    FOR(1, 1,
    FOR(2, 0,
    FOR(3, 0,
    FOR(4, 0,
    FOR(5, 0,
    FOR(6, 0,
    FOR(7, 0,
    FOR(8, 0,
    FOR(9, 0,
    FOR(10, 0,
        
        if ( sum == 10 )
        {
            long long number = a1 * 1e9 + a2 * 1e8 + a3 * 1e7 + a4 * 1e6
                             + a5 * 1e5 + a6 * 1e4 + a7 * 1e3 + a8 * 1e2
                             + a9 * 10 + a10;           
            
            printf("%lld ", number);            
        }
        
    ) ) ) ) ) ) ) ) ) )
    
    return 0;                                   
}
В принципе можно и для 10^16 посчитать таким способом, т.к. на самом деле перебирается небольшое количество чисел, все лишнее отсекается.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru