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

рекурсия на расставление знаков между числами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ матрицы http://www.cyberforum.ru/cpp-beginners/thread65700.html
в матрицу С добавить строки, которые есть в матрице А, но отсутствуют в матрице В. нужно разработать программу на си, реализующую этот алгоритм.
C++ Работа со строками Люди, если есть у кого время прошу просветить на тему Работу со строками ! Начили изучать, а примеров никаких нет ! И надо решить четыре задачи, но четвёртую не обязательно.....Спасибо ! :sorry: Задача №1 Задача №2 Задача №3 Задача №4 http://www.cyberforum.ru/cpp-beginners/thread65676.html
C++ Консоль и GUI
Доброго времени суток! Я-новичок, в рамках учебной программы изучал когда-то С++, было это давно, и программировали тогда мы под консоль. Собственно, в данное время иногда чувствуется острая необходимость в умении программировать. Решил начать с самого начала, с книги Стефана Р. Дэвиса "С++ для чайников". Но взглянув на количество различных компиляторов С++ (поправьте меня, если я употребил не...
не могу решить до конца C++
Есть задачка, и не могу понять в чём я ошибаюсь: Нужно из одного текста, который мы вводим с клавиатуры, найти самые длиное слово и сравнить если его последние буквы равны с первыми буквами из последуюшего слова к примеру"букВА ВАл" первое слово он находит а вот остальные слова если есть такого же размера он не проверяет! вот собственно и код:#include <stdio.h> #include <stdlib.h> #include...
C++ Win API форма курсора http://www.cyberforum.ru/cpp-beginners/thread65604.html
Привет. Делаю оконное приложение на win api. Надо программно сделать форму курсора - стрелка (стандартная). Как это сделать, подскажите?
C++ Метод Фибоначчи Ребята, помогите пожалуйста написать программу на С++ по методу Фибоначчи, при условии f(x)=2x*x*x-6*x+3, a=0, b=2,5 . подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.11.2009, 15:20     рекурсия на расставление знаков между числами
Вот вариант (и даже с рекурсией):
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <iostream.h>
#include <math.h>
#include <windows.h>
bool prov_znak(int *temp_znak, int n)
{
    int kol_1=0, kol_2=0, kol_3=0;
    for(int i=0; i<n; i++)
    {
        if(temp_znak[i]==1 && i!=0)
            kol_1++;
        if(temp_znak[i]==2)
            kol_2++;
        if(temp_znak[i]==3)
            kol_3++;
    }
    if((kol_1-kol_3==0 || kol_1-kol_3==1) && kol_1>kol_2 && kol_1!=0 && kol_2!=0 && kol_3!=0)
        return true;
    else
        return false;
}
 
int znach_vir(int *temp_znak, int *mas, int n)
{
    int temp, rez=0;
    if(temp_znak[0]==2)
        rez=-1*mas[0];
    else
        rez=mas[0];
    for(int i=1; i<n; i++)
    {
        temp=0;
        if(temp_znak[i]==1 && temp_znak[i+1]!=3)
            rez+=mas[i];
        if(temp_znak[i]==2 && temp_znak[i+1]!=3)
            rez-=mas[i];
        if(i==1 && temp_znak[1]==3)
            while(temp_znak[i]==3)
            {
                rez*=mas[i];
                i++;
            }
        if(temp_znak[i+1]==3)
        {
            temp=mas[i];
            if(temp_znak[i]==2)
                temp*=-1;
            while(temp_znak[i+1]==3)
            {
                temp*=mas[i+1];
                i++;
            }
        }
        rez+=temp;      
    }
    return rez;
}
 
void rec_funk(int *mas, int *znak, int *temp_znak , int n, int rez)
{
    int i;
    do
    {
        temp_znak[n-1]++;
        for(i=n-1; i>=0; i--)
            if(temp_znak[i]>3)
            {
                temp_znak[i]=1;
                temp_znak[i-1]+=1;
            }
    }while(!prov_znak(temp_znak, n));
    if(temp_znak[0]!=3)
    {
    if(fabs(znach_vir(temp_znak, mas, n)-rez) < fabs(znach_vir(znak, mas, n)-rez))
        for(i=0; i<n; i++)
            znak[i]=temp_znak[i];
    rec_funk(mas, znak, temp_znak, n, rez);
    }
    
}
 
int main()
{
    int *mas, *znak, *temp_znak , i, n, rez;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout<<"Ââåäèòå êîëè÷åñòâî Г·ГЁГ±ГҐГ« ГЁГ§ Г*Г*áîðГ*"<<endl;
    cin>>n;
    mas=new int[n];
    znak=new int [n];
    temp_znak=new int[n];
    cout<<"Ââåäèòå Г·ГЁГ±Г«Г* Г*Г*áîðГ*"<<endl;
    for(i=0; i<n; i++)
    {
        cout<<i+1<<" ÷èñëî =";
        cin>>mas[i];
        temp_znak[i]=1;
    }
    cout<<"Ââåäèòå Г§Г*Г¤Г*Г*Г*îå ÷èñëî (ðåçóëüòГ*ГІ âûðГ*æåГ*ГЁГї ГЄ êîòîðîìó äîëæåГ* ñòðåìèòüñÿ)"<<endl;
    cin>>rez;
    while(!prov_znak(temp_znak, n))
    {
        temp_znak[n-1]++;
        for(i=n-1; i>=0; i--)
            if(temp_znak[i]>3)
            {
                temp_znak[i]=1;
                temp_znak[i-1]+=1;
            }
    }
    for(i=0; i<n; i++)
        znak[i]=temp_znak[i];
    rec_funk(mas, znak, temp_znak , n, rez);
    for(i=0; i<n; i++)
    {
        if(znak[i]==1)
            cout<<'+';
        if(znak[i]==2)
            cout<<'-';
        if(znak[i]==3)
            cout<<'*';
        cout<<mas[i];
    }
    cout<<endl;
return 0;
}
 
Текущее время: 02:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru