Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 30.01.2017
Сообщений: 31
1

Рекурсия: вывести лишь те элементы, которые являются суммой 2-х предыдущих и меньше следующего элемента

15.06.2017, 01:00. Показов 1580. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вводится последовательность целых чисел. Необходимо вывести лишь те числа, которые являются суммой 2х предыдущих и меньше следующего элемента. Не использовать циклы, массивы, глобальные переменные, указатели, строки.
P.S. Задание основано на рекурсии(ях).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2017, 01:00
Ответы с готовыми решениями:

Удалить из строк матрицы те элементы, которые меньше следующего элемента
Уважаемые граждане, нужен хелп, дело вот в чём: Нужно преобразовать заданную двумерную...

Вывести на экран все элементы массива, которые меньше последнего элемента и больше первого элемента
Первая строка число N,(N>0) -- длина массива. Длина массива не более 100 элементов. Вторая строка N...

Рекурсия: найти все i-ые элементы, которые меньше i-2 и больше i-1
Необходимо на с++ реализовать программу по данной задаче: Вводиться последовательность элементов,...

Заменить все элементы, которые меньше последнего элемента на значение первого элемента
2) Заменить все элементы, которые меньше последнего элемента на значение первого элемента.(2задание)

15
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
15.06.2017, 01:47 2
Цитата Сообщение от Amadi198972 Посмотреть сообщение
рекурсии(ях)
РекурсиЯХ.
1
0 / 0 / 0
Регистрация: 30.01.2017
Сообщений: 31
15.06.2017, 01:52  [ТС] 3
Добавлено через 2 минуты
Цитата Сообщение от TButton Посмотреть сообщение
РекурсиЯХ.
Так а что с кодом?)
0
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
15.06.2017, 02:14 4
Цитата Сообщение от Amadi198972 Посмотреть сообщение
Так а что с кодом?)
Ну вы сказали, что нельзя использовать ни переменные, ни массивы, поэтому пользователю просто некуда вводить последовательность. Потому то с кодом плохо.
Если вам реально нужен работающий код, то придётся нарушить ваше указание и код будет такой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
int m[5], vv=2; //Пользователь вводит последовательность чисел, ограниченную 6-ю итемами
using namespace std;
 
void echo(){
vv++;
if(m[vv]==(m[vv-2]+m[vv-1]))
    cout << m[vv];
 
if(vv==5)
return; 
echo(); 
}
int main(){
    cin >> m[0] >> m[1] >> m[2] >> m[3] >> m[4] >> m[5]; //ВВод
    echo(); //ввод
    _getch();
}
Результат работы
Изображения
 
0
0 / 0 / 0
Регистрация: 30.01.2017
Сообщений: 31
15.06.2017, 02:21  [ТС] 5
Цитата Сообщение от TButton Посмотреть сообщение
Ну вы сказали, что нельзя использовать ни переменные, ни массивы, поэтому пользователю просто некуда вводить последовательность. Потому то с кодом плохо.
Если вам реально нужен работающий код, то придётся нарушить ваше указание и код будет такой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
int m[5], vv=2; //Пользователь вводит последовательность чисел, ограниченную 6-ю итемами
using namespace std;
 
void echo(){
vv++;
if(m[vv]==(m[vv-2]+m[vv-1]))
    cout << m[vv];
 
if(vv==5)
return; 
echo(); 
}
int main(){
    cin >> m[0] >> m[1] >> m[2] >> m[3] >> m[4] >> m[5]; //ВВод
    echo(); //ввод
    _getch();
}
Результат работы
Нет, ваш код не подходит. Как сделать с массивом я ещё пойму, не думал над этим просто.
Я знаю примерно идею, мне не очень помогло, может вам поможет.
У меня в коде много ошибок, но может вас натолкнёт на мысль.
Суть в чём. Если имеется вхождение элемента, то вызывается функция. В функции У нас 5 условий. Если есть первый элемент, то продолжаем, если второй, то продолжаем, если 3, то считаем сумму первых двух. Если 4, то сравниваем с 3, если 4>3, то выводим 3 и идём дальше. Если имеется вхождение 5го элемента, то переприсваиваем переменные. k1=k2; k2=k3; k3=k4; и начинаем всю функцию по новой. И так до тех пор пока не будет вхождения следующего элемента. Я плохо понимаю синтаксис в данном случае, но может вы поймёте. Вот мой "код"...
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
#include <iostream>
using namespace std;
int rec(int k1, int k2, int k3, int k4, int if5)
{
    int sum = 0;
    if (k1)
        return rec(k1, 0, 0, 0, false);
    if (k2)
        return rec(k1, k2, 0, 0, false);
    if (k3)
        sum = k1 + k2;
    if (k4)
    {
        if (k4 > k3 && k3 == sum)
        {
            cout << endl << k3;
        }
        return (k1, k2, k3, k4, false);
    }
    if (!if5)
    {
        k1 = k2;
        k2 = k3;
        k3 = k4;
        k4 = if5;
        return (k1, k2, k3, k4, false);
    }
    return(0);
}
 
int main()
{
    setlocale(LC_ALL, "RUSSIAN");
    int prob;
    cout << "Введите последовательность чисел " << endl << "(Признак конца ввода '.')" << endl;
    cin >> prob;
    rec(prob, 0, 0, 0, false);
}
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
15.06.2017, 08:06 6
Цитата Сообщение от Amadi198972 Посмотреть сообщение
Не использовать циклы, массивы, глобальные переменные, указатели, строки.
ну тогда и с++ не использовать.

Добавлено через 16 минут
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
#include <iostream>
 
bool enterOne(int & ret)
{
    std::string ent;
    std::cin >> ent;
    if (ent == ".") return false;
    return (ret = std::stoi(ent), true);
}
 
void foo(int prev1, int prev2, int current)
{
    int next;
    if (enterOne(next) == false) return;
    if (prev1 + prev2 == current && current < next) std::cout << current << '\n';
    foo(prev2, current, next);
}
 
int main()
{
    int first, second, third;
    std::cin >> first >> second >> third;
    foo(first, second, third);
}
http://rextester.com/AAAA34918
0
0 / 0 / 0
Регистрация: 27.01.2017
Сообщений: 38
15.06.2017, 08:17 7
Мой вариант
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
# include <iostream>
# include <locale>  // setlocale(LC_ALL, "Russian");
# include <iomanip>
# include <stdlib.h> /* srand, rand */
# include <math.h>
# include <stdio.h>  /* printf, NULL */
# include <time.h>
 
 
using namespace std;
 
void rec (int c, int b, int a){
 //   int a;
    cout << "Введите число = ";
    cin  >> a;
    if (a == (c)+(b) ){
        cout << "Число соответствует требованиям" << setw(4) << a << " = " << c << " + " << b
             << endl << "Повторите поцедуру ввода данных" << endl;
 
        rec(b,a,c);
    }
    else {
        cout << "Введите данные заново число не верное" << endl;
        rec(c,b,a);}
 
 
    }
 
 
 
main(){
    setlocale(LC_ALL, "RUSSIAN");
 
    cout << "Введите последовательность чисел " << endl << "(Признак конца ввода '.')" << endl;
//    cin >> prob;
    rec(1,1,0);
    return 0;
   }
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
15.06.2017, 08:19 8
Цитата Сообщение от streccoza Посмотреть сообщение
f (a == (c)+(b) ){
* * * * cout << "Число соответствует требованиям"
Цитата Сообщение от Amadi198972 Посмотреть сообщение
вывести лишь те числа, которые являются суммой 2х предыдущих и меньше следующего элемента.
...
0
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
15.06.2017, 09:40 9
Цитата Сообщение от GbaLog- Посмотреть сообщение
ну тогда и с++ не использовать.
Тогда и программировать не надо
0
0 / 0 / 0
Регистрация: 30.01.2017
Сообщений: 31
15.06.2017, 09:49  [ТС] 10
Цитата Сообщение от GbaLog- Посмотреть сообщение
ну тогда и с++ не использовать.

Добавлено через 16 минут
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
#include <iostream>
 
bool enterOne(int & ret)
{
    std::string ent;
    std::cin >> ent;
    if (ent == ".") return false;
    return (ret = std::stoi(ent), true);
}
 
void foo(int prev1, int prev2, int current)
{
    int next;
    if (enterOne(next) == false) return;
    if (prev1 + prev2 == current && current < next) std::cout << current << '\n';
    foo(prev2, current, next);
}
 
int main()
{
    int first, second, third;
    std::cin >> first >> second >> third;
    foo(first, second, third);
}
http://rextester.com/AAAA34918
В итоге вы использовали строки...
Эх...
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
15.06.2017, 10:42 11
Лучший ответ Сообщение было отмечено Amadi198972 как решение

Решение

господи боже мой. ты сам-то что-нибудь можешь сделать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
bool enterOne(int & ret)
{
    std::cin >> ret;
    return static_cast<bool>(std::cin);
}
 
void foo(int prev1, int prev2, int current)
{
    int next;
    if (enterOne(next) == false) return;
    if (prev1 + prev2 == current && current < next) std::cout << current << '\n';
    foo(prev2, current, next);
}
 
int main()
{
    int first, second, third;
    std::cin >> first >> second >> third;
    foo(first, second, third);
}
Добавлено через 33 секунды
Цитата Сообщение от TButton Посмотреть сообщение
Тогда и программировать не надо
ему и не надо.
1
290 / 87 / 28
Регистрация: 25.01.2016
Сообщений: 529
Записей в блоге: 1
15.06.2017, 12:32 12
Цитата Сообщение от Amadi198972 Посмотреть сообщение
В итоге вы использовали строки...
Эх...
А я говорил, что без этого ничего не получится.
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
15.06.2017, 12:59 13
Цитата Сообщение от TButton Посмотреть сообщение
без этого ничего не получится.
смотрите #11.
0
4817 / 2278 / 287
Регистрация: 01.03.2013
Сообщений: 5,947
Записей в блоге: 28
15.06.2017, 16:00 14
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Цитата Сообщение от Amadi198972 Посмотреть сообщение
Не использовать циклы, массивы, глобальные переменные, указатели, строки.
C++
1
2
3
4
5
6
void f(int i, int a, int b, int c, int d) {
    if (i>=4 && c==a+b && c<d) cout<<c<<'\n';
    int e; if (cin>>e) f(i+1, b, c, d, e);
}
 
int main() { f(0,0,0,0,0); }
0
0 / 0 / 0
Регистрация: 30.01.2017
Сообщений: 31
15.06.2017, 21:06  [ТС] 15
офф тему, сделал сам.
0
MrGluck
15.06.2017, 22:43     Рекурсия: вывести лишь те элементы, которые являются суммой 2-х предыдущих и меньше следующего элемента
  #16
 Комментарий модератора 
Сообщения и темы, а также другой контент, размещаемый на форуме, по просьбам пользователей не удаляется и не закрывается.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.06.2017, 22:43

Вывести лишь те элементы, которые стоят по краям матрицы, сохраняя их положение в пространстве
Описать двумерный массив размерностью 7х7. Заполнить массив случайными значениями из диапазона от...

Вывести числа последовательности Фиббоначи, которые меньше заданного числа ( рекурсия)
Здравствуйте! Столкнулся с проблемой вывода чисел последовательности Фиббоначи, которые меньше...

Заменить на значение минимального элемента те элементы матрицы, которые меньше среднего арифметического
Заменить на значение минимального элемента те элементы матрицы, которые меньше среднее...

Вывести все элементы списка, которые меньше
Добрый день! Пожалуйста, помогите решить: Есть список a = . Выведите все элементы, которые...

Рекурсия.Дана матрица a(m,n). Найти в ней путь от элемента a[i1,j1] до элемента a[i2,j2] с максимальной суммой
Помогите сделать на java.Не особо понимаю, как эту задачу можно реализовать. Дана матрица a(m,n)....

Вывести те элементы массива, которые являются чётными числами
Дан массив, состоящий из целых чисел. Напишите программу, которая выводит те элементы массива,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru