Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
K_arina
0 / 0 / 1
Регистрация: 15.05.2016
Сообщений: 34
1

Создать программу с рекурсивной функцией, которая будет вычислять делится ли число на 11 или нет

28.09.2016, 21:30. Просмотров 961. Ответов 15
Метки нет (Все метки)

Создать прорамму с рекурсивной функцией, которая будет вычислять делится ли число на 11 или нет.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2016, 21:30
Ответы с готовыми решениями:

Нужно откоректировать программу которая будет при вводе любого числа, выводить чётное оно или нет
Здравствуйте, мне нужно откоректировать программу которая будет при вводе...

Нужно написать программу которая будет вычислять факториал. В нете много подобного, но хорошего не увидел. Может у кого код завалялся.
Помогите написать программу которая будет вычислять факториал. В нете много...

Создать программу, которая будет определять с какой буквы вы ввели слово с А, с Б или с В и выводить об этом сообщение
Ребят, нужна помощь. С++ Создать программу, которая будет определять с...

Создать структуру с рекурсивной функцией
Создать структуру в которой ввод и вывод информации будет осуществлятся с...

Написать программу, которая проверяет, делится ли на три введенное с клавиатуры целое число
Написать программу, которая проверяет, делится ли на три введенное с клавиатуры...

15
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
28.09.2016, 21:33 2
K_arina, Тут ни к чему рекурсия, можно вычислить так:
C++
1
2
3
4
if( a % 11 == 0 )
{
    std::cout << "divided" << std::endl;
}
0
K_arina
0 / 0 / 1
Регистрация: 15.05.2016
Сообщений: 34
28.09.2016, 21:37  [ТС] 3
Суть задания именно в рекурсии
0
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 965
Завершенные тесты: 3
28.09.2016, 21:51 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool rec(int x) // рекурсия для положительных чисел
{
   if (x == 0)
      return true;
   else if (x < 0)
      return false;
   else 
      return rec(x-11);
}
 
int main() 
{
   ...
   rec(abs(x)); // положительное число
}
0
SpBerkut
Объявлятель переменных
948 / 274 / 276
Регистрация: 24.09.2011
Сообщений: 1,009
Завершенные тесты: 2
28.09.2016, 22:03 5
Экзотический вариант через разность сумм цифр на чётных и нечётных позициях.
C++
1
2
3
4
5
6
7
8
9
10
11
12
unsigned foo(unsigned value){
    unsigned r1=0, r2=0;
    while (value){
        r1+=value%10;
        value/=10;
        r2+=value%10;
        value/=10;
    }
    r1=(r1>r2)?r1-r2:r2-r1;
    if (r1>10) return foo(r1); //рекурсивный вызов тут
    return r1==0?1:0;
}
0
rikimaru2013
C++ Game Dev
2473 / 1141 / 349
Регистрация: 30.11.2013
Сообщений: 3,709
28.09.2016, 22:09 6
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
#include <iostream>
using namespace std;
 
template <int N>
struct IsDevided_11
{
    static const bool value = IsDevided_11< ( N - 11 >= 11 || N == 11) ? (N-11) : -1  >::value;
        
};
 
template <>
struct IsDevided_11<-1>
{
    static const bool value = false;
};
template <>
struct IsDevided_11<0>
{
    static const bool value = true;
};
 
int main()
{
    cout << std::boolalpha << IsDevided_11< 187 >::value << endl;
}
1
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 965
Завершенные тесты: 3
28.09.2016, 22:34 7
rikimaru2013, а у вас программка вычислит результат на этапе компиляции или я ошибаюсь?
0
rikimaru2013
C++ Game Dev
2473 / 1141 / 349
Регистрация: 30.11.2013
Сообщений: 3,709
28.09.2016, 22:36 8
mat_for_c, ну да - это ведь meta-programming C++ - но чую, что в моём коде есть баги - особо не тестировал - просто интересно было решить на шаблонах, без / и %, да еще и рекурсия)
0
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 965
Завершенные тесты: 3
28.09.2016, 22:45 9
Лучший ответ Сообщение было отмечено K_arina как решение

Решение

Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ну да - это ведь meta-programming C++
круто, но я до него ещё не скоро дойду...
Есть ещё такой интересный метод:
C++
1
2
3
4
5
6
7
8
9
10
11
bool rec(unsigned int x) {
   if (x == 0)
      return true;
   else if (x < 10)
      return false;
   else {
      auto tmp = x % 10;
      x /= 10;
      return rec(x - tmp);
   }
}
0
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,803
Записей в блоге: 2
Завершенные тесты: 1
29.09.2016, 01:07 10
rikimaru2013, Ваш код упрется в максимальный предел вложенности очень быстро.
Например, в gcc: http://rextester.com/CPM5989
0
rikimaru2013
C++ Game Dev
2473 / 1141 / 349
Регистрация: 30.11.2013
Сообщений: 3,709
29.09.2016, 10:01 11
Croessmah, вас только это смущает?)
0
Croessmah
++Ͻ
14777 / 8453 / 1605
Регистрация: 27.09.2012
Сообщений: 20,803
Записей в блоге: 2
Завершенные тесты: 1
29.09.2016, 10:02 12
rikimaru2013, меня смущает сам метод
0
rikimaru2013
C++ Game Dev
2473 / 1141 / 349
Регистрация: 30.11.2013
Сообщений: 3,709
29.09.2016, 10:26 13
Croessmah,
0
K_arina
0 / 0 / 1
Регистрация: 15.05.2016
Сообщений: 34
29.09.2016, 11:36  [ТС] 14
mat_for_c,
C++
1
2
3
4
5
else {
      auto tmp = x % 10;
      x /= 10;
      return rec(x - tmp);
   }
Можете, пожалуйста, объяснить этот момент?
0
mat_for_c
217 / 210 / 77
Регистрация: 26.04.2013
Сообщений: 965
Завершенные тесты: 3
29.09.2016, 17:31 15
Любое число представимо в виде http://www.cyberforum.ru/cgi-bin/latex.cgi?x = 10a + b
Если х делится на 11, тогда должно выполняться следующее:
http://www.cyberforum.ru/cgi-bin/latex.cgi?10a\,+\,b\equiv 0\,\left(mod\,11\right)
http://www.cyberforum.ru/cgi-bin/latex.cgi?10a\,+\,b\,+\,(-11b)\equiv 0\,\left(mod\,11\right)
http://www.cyberforum.ru/cgi-bin/latex.cgi?10a\,-\,10b\equiv 0\,\left(mod\,11\right)

Т.к. 10 и 11 взаимно простые числа, то можем разделить на 10. Итого:
http://www.cyberforum.ru/cgi-bin/latex.cgi?a\,-\,b\equiv 0\,\left(mod\,11\right)

a = x/10; b = x%10;

Теперь проверяем новое число? делится ли оно на 11 (рекурсия)
0
Mr.X
Эксперт С++
3183 / 1710 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
29.09.2016, 18:24 16
Цитата Сообщение от mat_for_c Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
bool rec(unsigned int x) 
{ 
if (x == 0) return true; 
else if (x < 10) return false; 
else 
{ 
auto tmp = x % 10; x /= 10; 
return rec(x - tmp); 
} 
}
Ну, логику здесь можно гораздо проще изложить:
C++
1
2
3
4
5
6
bool is_divisible_by_11(T_int   n)
{
    return  n < 11
                ?   !n
                :   is_divisible_by_11( n / 10 - n % 10 );
}
0
29.09.2016, 18:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2016, 18:24

Написать программу с рекурсивной функцией
Написать программу с рекурсивной функцией, вычисляющей:...

Если a делится на b или b делится на a, то вывести 1, иначе – любое другое число
Доброго времени суток! В С++ недавно, но в универе уже задали такие задачи: ...

Если а делится на b или b делится на а, то вывести 1, иначе— любое другое число
Даны два целых числа а и b. Если а делится на b или b делится на а, то вывести...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru