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

Последовательность Хэмминга - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нажатие кнопки в окне стим http://www.cyberforum.ru/cpp-beginners/thread1761431.html
Можно ли как-нибудь без WinApi нажать кнопку "автономный режим" при запуске стим? Пока мои поиски навели на 2 пути. Либо через WinApi найти кнопку в приложении и послать сигнал ее нажатия. Но я так и...
C++ (Структура)Информация по N заводах города задается строкой следующего вида: фамилия , средний возраст , (Структура)Информация по N заводах города задается строкой следующего вида: фамилия , средний возраст , специальность, средний оклад. Ввести информацию по заводам , посчитать количество слесарей и... http://www.cyberforum.ru/cpp-beginners/thread1761383.html
Проверить периодичность функции C++
3)Утверждается, что функция y=f(x) периодическая с периодом T. Проверить это численно, вычислив функцию с постоянным шагом на отрезке . Учесть погрешность вычислений и возможные точки разрыва функций.
C++ Определить, является ли треугольник тупоугольным, прямоугольным или остроугольным
2)Треугольник задан длинами своих сторон:a,b,c. Определить, является ли он тупоугольным, прямоугольным или остроугольным.
C++ Перевод величины угла из радианов в градусы http://www.cyberforum.ru/cpp-beginners/thread1761357.html
1)Угол a задан в радианах. Найти его величину в градусах, минутах и секундах.
C++ Передача неизвестного объекта в метод класса Ситуация такова: имеется класс (в зачаточном состоянии) class Archer { private: double penRate; public: Archer(void); double setDmgGttn(); void Atk(); подробнее

Показать сообщение отдельно
_Ivana
3149 / 1777 / 152
Регистрация: 01.03.2013
Сообщений: 4,981
Записей в блоге: 2
13.06.2016, 16:25
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <functional>
using namespace std;
 
typedef std::pair<bool, int>  li_t;
typedef std::function<li_t()> fi_t;
 
int main() {
    fi_t nil  = []() -> li_t {return std::make_pair(false, 0);};
    auto null = [](li_t a) -> bool {return !a.first;};
    auto val  = [](li_t a) -> int  {return a.second;};
    
    auto cons = [](int a, const fi_t& l) -> fi_t {
        int p=0; return [=]() mutable -> li_t {
                    if (p) return l(); else {p=1; return std::make_pair(true, a);}};};
    
    auto map = [cons,nil,null,val](const auto& f, const fi_t& l) -> fi_t {
        auto go = [f,cons,nil,null,val](const fi_t& l, const auto& la) -> fi_t {
            li_t e=l(); return null(e) ? nil : cons(f(val(e)), la(l, la));};
        return go(l, go);};
        
    auto show = [null,val](const fi_t& l) -> int {
        auto go = [null,val](const fi_t& l, auto& la) -> int {
            li_t e=l(); if (null(e)) {cout<<'\n'; return 0;}
                        else {cout<<val(e)<<'\t'; return la(l, la);}};
        return go(l, go);};
     
    auto merge = [cons,nil,null,val](const fi_t& a, const fi_t& b) -> fi_t {
        auto go = [cons,nil,null,val](const fi_t& a, const fi_t& b, const auto& la) -> fi_t {
            li_t ea=a(), eb=b();
            return null(ea) && null(eb) ? nil :
                null(ea) ? cons(val(eb), b) : null(eb) ? cons(val(ea), a) :
                val(ea)<val(eb) ? cons(val(ea), la(a, cons(val(eb), b), la)) :
                val(ea)>val(eb) ? cons(val(eb), la(cons(val(ea), a), b, la)) :
                                  cons(val(ea), la(a, b, la));};
        return go(a, b, go);};
    
    auto take = [cons,nil,null,val](int n, const fi_t& l) -> fi_t {
        auto go = [cons,nil,null,val](int i, const fi_t& l, const auto& la) -> fi_t {
            li_t e=l(); return (!i) || null(e) ? nil : cons(val(e), la(i-1, l, la));};
        return go(n, l, go);};
        
    auto equal = [null,val](const fi_t& a, const fi_t& b) -> bool {
        auto go = [null,val](const fi_t& a, const fi_t& b, const auto& la) -> bool {
            li_t ea=a(), eb=b();
            return null(ea) && null(eb) ? true : null(ea) ? false : null(eb) ? false :
                val(ea)==val(eb) ? la(a, b, la) : false;};
        return go(a, b, go);};
   
    auto hammingList = [=](int n) -> fi_t {
        
        auto step = [merge,map,cons](const fi_t& l) -> fi_t {
            auto sc = [map](int n, const fi_t& l) -> fi_t {
                return map([n](int i)->int {return i*n;}, l);};
            fi_t l2=l, l3=l, l5=l;
            return cons(1, merge(sc(2, l2), merge(sc(3, l3), sc(5, l5))));};
            
        auto go = [n,step,take,equal](const fi_t& l, const auto& la) -> fi_t {
            fi_t l0=l, le0=l, l1=step(l), le1=l1;
            if (equal(take(n,le0), take(n,le1))) return take(n,l0);
            else return la(l1, la);};
 
        return go(cons(1,nil), go);};
    
    auto foldr = [cons,nil,null,val](const auto& f, auto a, const fi_t& l) -> fi_t {
        auto go = [f,cons,nil,null,val](auto a, const fi_t& l, const auto& la) -> fi_t {
            li_t e=l(); return null(e) ? a : f(val(e), la(a, l, la));};
        return go(a, l, go);};
    
    int N; cin >> N;
 
    fi_t h = hammingList(N);
    //show(h);
 
    cout << "Sum = " << val(foldr(
        [cons,nil,val](int a, const fi_t& b) -> fi_t {return cons(a+val(b()), nil);},
        cons(0,nil), h) ()) << '\n';
    
    return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru