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

Определить, является ли билет счастливым с помощью рекурсии - C++

Восстановить пароль Регистрация
 
Rinosky
 Аватар для Rinosky
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 28
14.07.2014, 16:12     Определить, является ли билет счастливым с помощью рекурсии #1
Проверка является ли билет счастливым (123123 - ДА, 123124 - НЕТ) с использованием в решении рекурсии.
Хватило только на простенькое решение...
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 <stdio.h>
#include <iostream>
using namespace std;
 
int main()
{
    int number;
    int sum = 0;
    cout << " Input number: ";
    cin >> number;
    int rhalf = number % 1000;
    int lhalf = number / 1000;
    for (int i = 0; i < 3; ++i)
    {
        sum += (rhalf % 10 - lhalf % 10);
        rhalf /= 10;
        lhalf /= 10;
    }
    cout << "Number " << number << " is ";
    if (0 != sum)
        cout << " not ";
    cout <<"lucky" << endl;
 
 
    return 0;
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2014, 16:12     Определить, является ли билет счастливым с помощью рекурсии
Посмотрите здесь:

C++ Определить, является ли заданное с клавиатуры шестизначное число четным, счастливым
a в степени n с помощью рекурсии C++
Определить является ли заданное шестизначное число счастливым(+ ещё 3 задачи решите мне) C++
Массив: С помощью рекурсии определить количество нулевых элементов. C++
C++ Написать функцию, определяющую, является ли число "счастливым"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mycola
22 / 12 / 13
Регистрация: 23.03.2013
Сообщений: 157
14.07.2014, 16:20     Определить, является ли билет счастливым с помощью рекурсии #2
Вопросик, всегда ли это число будет шестизначным? Или может быть любых размеров например 4545, 19231923 и нечетных размеров?
Rinosky
 Аватар для Rinosky
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 28
14.07.2014, 18:04  [ТС]     Определить, является ли билет счастливым с помощью рекурсии #3
Всегда шестизначное.
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
14.07.2014, 18:48     Определить, является ли билет счастливым с помощью рекурсии #4
ну как то так
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
#include <iostream>
using namespace std;
int fnc(int n)
{
if(n==0)
  return 0;
if(n<0)
  {
n*=-1;
  return n%10-fnc(n/10);
  }
else
 {
  return n%10-fnc(-1*n/10);
 }
 
 
}
 
 
int main() {
    //int arr[512]={0,};
   if(  fnc(123124))
     cout<<"no";
   else
     cout<<"yes";
   
 
 
 
    return 0;
}
Добавлено через 30 минут
другой вариант
C++
1
2
3
4
5
6
7
int fnc(int n)
{
if(n==0)
  return 0;
 
 return n%10+fnc(-1*n/10); 
}
но я сталкивался с тем что остаток от деления отрицательных чисел неверен
Voivoid
 Аватар для Voivoid
580 / 256 / 12
Регистрация: 31.03.2013
Сообщений: 1,283
14.07.2014, 20:45     Определить, является ли билет счастливым с помощью рекурсии #5
Цитата Сообщение от ValeryS Посмотреть сообщение
ну как то так
Жестяной алгоритм Он кстати по-моему неправильно работает, если я конечно не путаю как считается счастливый билет. Скажем 111003 же счатливый?

Мой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cassert>
#include <iostream>
 
int is_lucky_helper( int a_num, int sum ) {
  return a_num == 0 ? sum : is_lucky_helper( a_num / 10, sum + ( a_num % 10 ) );
}
 
bool is_lucky( int a_num ) {
  assert( a_num >= 0 && a_num <= 999999 );
 
  int left = is_lucky_helper( a_num / 1000, 0 );
  int right = is_lucky_helper( a_num % 1000, 0 );
 
  return left == right;
}
 
int main() {
 
  static const int n = 111003;
  std::cout << n << " is " << ( is_lucky( n ) ? "lucky" : "not lucky" ) << "\n";
 
  return 0;
}
ValeryS
Модератор
6373 / 4839 / 440
Регистрация: 14.02.2011
Сообщений: 16,038
14.07.2014, 21:23     Определить, является ли билет счастливым с помощью рекурсии #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Voivoid Посмотреть сообщение
Он кстати по-моему неправильно работает,
может и неправильно
я его на коленке придумал
сейчас подумаю как поправить
главное чтобы в одной функции было

Добавлено через 21 минуту
вот такой вариант зацени
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
#include <iostream>
using namespace std;
int fnc(int n)
{
  static int sum=0;
 if(n==0)
 {
   sum=0; 
  return 0;
 }
if(n/1000)
 {
    fnc(n/10);
     sum+=n%10;
    return sum;
   
 }
 else
 {
  fnc(n/10);
  sum-=n%10;
  return sum;
   
  }
}
 
int main() {
 
   if(  fnc(111003))
     cout<<"no";
   else
     cout<<"yes";
   
  if(   fnc(123123))
     cout<<"no";
   else
     cout<<"yes";
    return 0;
}
Yandex
Объявления
14.07.2014, 21:23     Определить, является ли билет счастливым с помощью рекурсии
Ответ Создать тему
Опции темы

Текущее время: 00:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru