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

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

Восстановить пароль Регистрация
 
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
21.11.2014, 17:49     Сравнение цифр в n-значном числе #1
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
    int x, y, n=99;
for(int i = 0; i <= n; i++)  // проход по всем числам в интервале, включая границы
{
x = i / 10; // старший знак - делим на 10. Например 43 / 10 = 4
y = i % 10; // младший знак - остаток от деления на 10. Например 43 % 10 = 3
 
if( (abs( x - y) == 1) & ((x != 0) & (y != 0)) ) // если разница по модулю равна единице и нет нулей
cout << i<< endl;
}
    getchar(); getchar();
    return 0;
Программа печатает все 2х значные числа разница между ними по модулю =1.
Как модифицировать программу чтобы она работала для n значных чисел.
Например:
число 125: сравниваем |1 - 2| = 1, потом сравниваем |2 - 5| > 1. число 125 не подходит
число 121: сравниваем |1 - 2| = 1, потом сравниваем |2 - 1| =1. число 121 подходит
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nosey
 Аватар для Nosey
1185 / 352 / 102
Регистрация: 22.10.2014
Сообщений: 791
Завершенные тесты: 2
21.11.2014, 18:11     Сравнение цифр в n-значном числе #2
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
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <string>
#include <sstream>
 
void main()
{
    int a = 0, b = 100;
    for (; a <= b; ++a)
    {
        std::stringstream stream;
        stream << a;
        std::string valueString;
        stream >> valueString;
        bool sucsess = true;
        for (auto c1 = valueString.begin(), c2 = c1+1, end = valueString.end(); c2 < end && sucsess; ++c1, ++c2)
        {
            sucsess &= abs(*c1 - *c2) <= 1;
        }
        if (sucsess)
        {
            std::cout << valueString << std::endl;
        }
    }
}
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
21.11.2014, 19:33  [ТС]     Сравнение цифр в n-значном числе #3
программа не запускается
выдает ошибку в 17 строке "В списке объявлений спецификатор "auto" должен всегда выводить тот же самый тип "
Nosey
 Аватар для Nosey
1185 / 352 / 102
Регистрация: 22.10.2014
Сообщений: 791
Завершенные тесты: 2
21.11.2014, 20:05     Сравнение цифр в n-значном числе #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
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <string>
#include <sstream>
 
void main()
{
    int a = 0, b = 100;
    for (; a <= b; ++a)
    {
        std::stringstream stream;
        stream << a;
        std::string valueString;
        stream >> valueString;
        bool sucsess = true;
        for (std::string::iterator c1 = valueString.begin(), c2 = c1 + 1, end = valueString.end(); c2 < end && sucsess; ++c1, ++c2)
        {
            sucsess &= abs(*c1 - *c2) <= 1;
        }
        if (sucsess)
        {
            std::cout << valueString << std::endl;
        }
    }
}
Mars74
1 / 1 / 0
Регистрация: 25.03.2013
Сообщений: 31
21.11.2014, 20:55  [ТС]     Сравнение цифр в n-значном числе #5
Для 2х значного диапазона (от 0 до 99) не правильно числа выводит... должен выводить только 16 цифр
12 21 23 32 34 43 45 54 56 65 67 76 78 87 89 98
для 3Х от значного диапазона (от 100 до 999) должен печатать
121 123 212 232 234 .... 878 987
Nosey
 Аватар для Nosey
1185 / 352 / 102
Регистрация: 22.10.2014
Сообщений: 791
Завершенные тесты: 2
21.11.2014, 22:07     Сравнение цифр в n-значном числе #6
Mars74, проверьте длину строки valueString(>1). Ну или же измените диапазон перебираемых значений с 10.
Yandex
Объявления
21.11.2014, 22:07     Сравнение цифр в n-значном числе
Ответ Создать тему
Опции темы

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