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

Соседние цифры в N значном числе - C++

Восстановить пароль Регистрация
 
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
20.11.2014, 13:25     Соседние цифры в N значном числе #1
Для n-значных чисел печатать только те, цифры которых являются соседними в натуральном ряду.
Программа правильно работает только с 2х значиными натуральным числами
для 3х значных должна выводиться последовательность:
123
234
345
456
567
678
789
А для 4х значных
1112
1213
1314
1415
1516
1617
1718
1819
2122
2223
------
9596
9697
9798

или
1234
2345
3456
4567
5678
6789 ?
как надо доработать программу?
C++ (Qt)
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
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------
 
  void RazlozhenieNaCh(int number, int n, int *ch)
    {   int i;
    for (i = 0; i < n; i++)
    {
        ch[i] = number % 10;
 
        number /= 10;
    } }
  bool SosednieCh(int *ch, int n)
  {     bool result = false;
        int raz = 0;
        for (int i = 0; i < n-1; i++)
        {
            for (int y = i + 1; y < n; y++)
            {
             // if ((ch[i] != 0 & ch[y] != 0)& (abs(ch[i] - ch[y]) == 1))
                if ((ch[i] != 0 & ch[y] != 0)& (((ch[i] - ch[y]) > 0)&((ch[i] - ch[y]) == 1)))
                {
                        raz++;  //cout << raz<< endl<< endl;
                }
            }
        }
        if (raz == n - 1)
        {
          result = true;
        }
        return result;
  }
  //-------------------------
int main()
{
    int n, min, max, i, KolCh = 0, NeChet = 0, *ch, t;
    cout << "Kolichestvo znakov  n: "; cin >> n ;
    min = pow(10, n - 1);
    max = min * 10 - 1;
    ch = new int[n];
    t = GetTickCount();
    for (i = min; i <= max; i++)
    {
        RazlozhenieNaCh(i, n, ch);
        if (SosednieCh(ch, n) == true)
        {   KolCh++;
            if (i % 2 == 1)
            {
                NeChet++;
            }
 
                cout<<i<<endl;
        }
        //=====
    }
    t = GetTickCount() - t;
    cout<<endl<<endl;
    cout<<"  Vsego chisel : "<< KolCh <<endl;
    cout<<"  Ne chetnih : "<< NeChet <<endl;
    cout<<"  Chetnih : " << KolCh - NeChet <<endl;
    cout<<"  Vremya raboti v ms: "<< t  <<endl;
    getchar(); getchar();
    delete[] ch; return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2014, 13:25     Соседние цифры в N значном числе
Посмотрите здесь:

Все ли цифры равны в числе C++
Соседние цифры в числе C++
Соседние цифры в числе C++
C++ Найти сумму цифр в 4-х значном числе
Одинаковые цифры в числе C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
 Аватар для Байт
13954 / 8785 / 1221
Регистрация: 24.12.2010
Сообщений: 15,894
20.11.2014, 14:11     Соседние цифры в N значном числе #2
Mars74, А такие трехзначные, как 910 или 4-х значные 8910 - не подойдут?

Добавлено через 22 минуты
Да, у тебя программа заточена именно на "однозначные" цифры. И довольно не эффективна, т.к. ты перебираешь все возможные числа диапазона и их провереяшь. В то время как нужные числа можно генерировать "впрямую"
Так, для двузначных все можно сделать так
C++
1
for(i=1; i<9; i++) cout << 10*i + i+1;
Для n-значных чуток сложнее. Надо пройтись по всем делителям числа n вот таким циклом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(d=1; d<=n/2; d++) {
  if (n%d) continue;  // d не является делителем n
    // Тут надо генерировать подходящие "цифры" размера d
  for(i=0, m=1; i<d; i++) m*=10;  // m = 10 в степени d (вместо pow, не люблю я его)
  for(i=m/10; i<d; i++) {
     s = 0;  // Здесь будет сгенерированное число
     for(j=0, k=i; j < n/d; j++, k++) {
        if (k>=m) break;  // k имеет больше d знаков - неудача
        s = m*s + k;
     }
     if (j==n/d) cout <<s << endl; 
  }
}
Не проверял. Возможны ошибки. Попробуй сам довести до ума, о результатах доложишь

Добавлено через 3 минуты
Цитата Сообщение от Mars74 Посмотреть сообщение
А для 4х значных
ИМХО, пропустил 1011 и 9899
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
21.11.2014, 15:42  [ТС]     Соседние цифры в N значном числе #3
я не правильно поняла условие. нуж
Цитата Сообщение от Байт Посмотреть сообщение
как 910 или 4-х значные 8910 - не подойдут?
они не подойдут т.к. 0 не натуральное...
но чтобы разница по модулю между всеми парами цифр в числе была равна = 1, то число подходит.... если число 125 то сравниваем |1 - 2| = 1, потом сравниваем |2 - 5| !=1. число 125 не подходит
Байт
 Аватар для Байт
13954 / 8785 / 1221
Регистрация: 24.12.2010
Сообщений: 15,894
21.11.2014, 17:59     Соседние цифры в N значном числе #4
Цитата Сообщение от Mars74 Посмотреть сообщение
они не подойдут т.к. 0 не натуральное.
Но 10 - натуральное!
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
21.11.2014, 18:07  [ТС]     Соседние цифры в N значном числе #5
само число 10 да, но если рассматривать его как цифры 1 и 0 то нет, так как диапазон натуральных чисел начинается с 1
Байт
 Аватар для Байт
13954 / 8785 / 1221
Регистрация: 24.12.2010
Сообщений: 15,894
21.11.2014, 18:14     Соседние цифры в N значном числе #6
Mars74, Грамотно (и однозначно) сформулируйте условие. Тогда будет о чем говорить.
Цитата Сообщение от Mars74 Посмотреть сообщение
цифры которых являются соседними в натуральном ряду.
Что такое цифра, знаете?
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
21.11.2014, 18:27  [ТС]     Соседние цифры в N значном числе #7
разумеется
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2014, 18:28     Соседние цифры в N значном числе #8
Цитата Сообщение от Байт Посмотреть сообщение
Да, у тебя программа заточена именно на "однозначные" цифры.
Цифры не имеют значности, у них только ичность.
Байт
 Аватар для Байт
13954 / 8785 / 1221
Регистрация: 24.12.2010
Сообщений: 15,894
21.11.2014, 18:38     Соседние цифры в N значном числе #9
Цитата Сообщение от Mars74 Посмотреть сообщение
разумеется
по формулировке задачи и приведенным примерам этого не скажешь...
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2014, 18:42     Соседние цифры в N значном числе #10
Цитата Сообщение от Mars74 Посмотреть сообщение
1213
3 не соседствует с 1.

Добавлено через 36 секунд
Цитата Сообщение от Mars74 Посмотреть сообщение
1112
1 и 1 - это одно число, а не два соседних.
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
21.11.2014, 19:11  [ТС]     Соседние цифры в N значном числе #11
Формулировка из задачника. относительно этой задачи удобнее допустить что, число состоит из цифр.
Если Вам удобнее другая формулировка то перефразирую.
Например число 125 состоит из 3х чисел 1,2,3.
сравниваем числа |1 - 2| = 1, потом сравниваем числа |2 - 5| !=1. число 125 не подходит
Если взмоем число 120, оно состоит из чисел 1,2,0. число 120 тоже не подходит.
0 - не является натуральным числом. Но если рассматривать число 120 "целиком" то оно будет натуральным.
Если взмоем число 654, оно состоит из чисел 6,5,4 разница между ними по модулю равна 1. число 654 подходит.

Добавлено через 10 минут
Эти последовательности не верны. Т.к. первоначально я не поняла как правильно сравнивать N значные числа.
Цитата Сообщение от Mars74 Посмотреть сообщение
123
234
345
456
567
678
789
А для 4х значных
1112
1213
1314
1415
1516
1617
1718
1819
2122
2223
------
9596
9697
9798
или
1234
2345
3456
4567
5678
6789 ?
+
для того чтобы программа корректно работала для 2 значных чисел надо закомментировать
Цитата Сообщение от Mars74 Посмотреть сообщение
if ((ch[i] != 0 & ch[y] != 0)& (((ch[i] - ch[y]) > 0)&((ch[i] - ch[y]) == 1)))
эту строку вместо верхней
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2014, 19:18     Соседние цифры в N значном числе #12
Цитата Сообщение от Mars74 Посмотреть сообщение
Формулировка из задачника. относительно этой задачи удобнее допустить что, число состоит из цифр.
В натуральном ряду цифр нет, там только числа. Значит получается так: есть цифра, из неё одной составляем число, в искомом числе рядом стоит другая цифра, из неё одной тоже составляем число, два полученных однозначных числа должны быть соседними. То есть:
10
12
21
23
32
34
43
45
54
56
65
67
76
78
87
89
98
101
121
123
210
212
232
234
321
323
343
345
432
434
454
456
543
545
565
567
654
656
675
678
765
767
787
789
876
878
987
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
21.11.2014, 20:37  [ТС]     Соседние цифры в N значном числе #13
Верно. только в этом ряду не должно быть чисел с 0. то есть:
Цитата Сообщение от taras atavin Посмотреть сообщение
101
Цитата Сообщение от taras atavin Посмотреть сообщение
210
Цитата Сообщение от taras atavin Посмотреть сообщение
10
Добавлено через 1 час 9 минут
Допустим я беру i-тое число из n значного диапазона.
Делю число на n составных элементов (элемент - однозначное число). функция
Цитата Сообщение от Mars74 Посмотреть сообщение
void RazlozhenieNaCh(int number, int n, int *ch)
потом просматриваю разности по модулю между 1 и 2 элементном числа ; 2 и 3 элементом числа и так до элемента n-1 и n. То есть в числе разрядностью n получается n-1 пар однозначных чисел сравниваемых между собой. Чтобы число подошло разность по модулю между элементами в паре =1 должна повториться n-1 раз, то есть для каждой пары. функция
Цитата Сообщение от Mars74 Посмотреть сообщение
bool SosednieCh(int *ch, int n)
.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2014, 06:06     Соседние цифры в N значном числе #14
Цитата Сообщение от Mars74 Посмотреть сообщение
Верно. только в этом ряду не должно быть чисел с 0. то есть:
Ну некоторые с ноля нумеруют. Например first flour - это по-русски второй этаж, а не первый, а под ним есть ещё один. Но first - это первый. Какой этаж под первым? Конечно же нулевой. Но если так понимать, то да.
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
22.11.2014, 13:04  [ТС]     Соседние цифры в N значном числе #15
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну некоторые с ноля нумеруют
Однако в учебниках пишут что наименьшее натуральное число - 1 и именно с него начинается ряд натуральных чисел..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2014, 13:12     Соседние цифры в N значном числе
Еще ссылки по теме:

C++ 3 цифры подряд в числе
Нахождение всех симметричных чисел в 4-х значном числе C++
C++ Сравнение цифр в n-значном числе

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2014, 13:12     Соседние цифры в N значном числе #16
В учебниках, изданных на русском. И я же не спорю. Хотите делать по-русски - делайте.
Yandex
Объявления
22.11.2014, 13:12     Соседние цифры в N значном числе
Ответ Создать тему
Опции темы

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