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

Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность - C++

Восстановить пароль Регистрация
 
Helgi
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 27
03.03.2014, 21:28     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #1
/*
Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность.
*/
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
#define RUS system("chcp 1251 > nul")
#define STOP system("pause")
using namespace std;
 
int main ()
{
    int i, temp, j, n;
 
    RUS;
    printf("Введите число n: ");
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        temp=0;
        j=i;
        while(j>0)
        {
            if(j%10!=0)
            {
                if((i/10)%10>(j%10))
                    temp=1;
            }
            else
                temp=1;
            j/=10;
        }
        if(temp==0)
            printf("%d, ",i);
    }
    printf("\b\b \n");
    STOP;
    return 0; 
}
Программа выводит еще и числа, цифры в которых равны друг другу (33, 44..), а, судя по условию, этого не должно быть. Подскажите, как от этого избавится? Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 21:28     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность
Посмотрите здесь:

Найти все натуральные n-значные числа, цифры в которых образуют строго возрастающую последовательность C++
C++ Реализовать программу, которая находит все натуральные n-значные числа,цифры в которых образуют строго возрастающую последовательность(1234,2378,5789)
.Определить количество чисел последовательности, у которых цифры образуют возрастающую последовательность. C++
C++ Циклы.Найти все натуральные числа не превосходящие заданного n, десятичная запись которых есть строго убывающая последовательность цифр
Цифры данного четырехзначного числа N образуют строго возрастающую последовательность C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,164
Завершенные тесты: 1
03.03.2014, 21:50     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #2
C++
1
if((i/10)%10>=(j%10))
Helgi
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 27
03.03.2014, 22:36  [ТС]     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #3
Не работает. Выдает от 1 до 9 и все.
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,911
03.03.2014, 23:24     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
for(i=1; i<n; i++) {
  ii = i;
  c = 10;
  while (ii) {
    c1 = ii%10;
    if (c1>=c) break;
    c = c1;
    ii /= 10;
  }
  if (ii > 0) continue;
  cout << i << endl;
}
011
9 / 9 / 0
Регистрация: 28.11.2013
Сообщений: 146
30.11.2014, 16:40     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #5
Цитата Сообщение от Байт Посмотреть сообщение
for(i=1; i<n; i++) {
* ii = i;
* c = 10;
* while (ii) {
* * c1 = ii%10;
* * if (c1>=c) break;
* * c = c1;
* * ii /= 10;
* }
* if (ii > 0) continue;
* cout << i << endl;
}
Байт, не могли бы Вы прокомментировать алгоритм решения?
И как переделать Ваше решение под такое условие задачи "Реализовать программу, которая находит все натуральные n-значные числа, цифры в которых образуют строго возрастающую последовательность"?
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,911
30.11.2014, 17:06     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #6
Цитата Сообщение от 011 Посмотреть сообщение
"Реализовать программу, которая находит все натуральные n-значные числа, цифры в которых образуют строго возрастающую последовательность"?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(M=i=1; i<n;i++) M*=10; // M - минимальное n-значное число
for(i=M; i<10*M; i++) {
  ii = i;
  c = 10;
  while (ii) {
    c1 = ii%10;
    if (c1>=c) break;
    c = c1;
    ii /= 10;
  }
  if (ii > 0) continue;
  cout << i << endl;
}
По поводу комментариев - что именно в коде непонятно?
_Ivana
30.11.2014, 17:09
  #7

Не по теме:

Вот за это

Цитата Сообщение от Байт Посмотреть сообщение
for(i=1; i<n; i++)
в подобных задачках, будь я преподавателем, никто бы выше тройки не получил, и то только если все остальное работает без изъянов.

Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,911
30.11.2014, 17:20     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #8
Цитата Сообщение от _Ivana Посмотреть сообщение
никто бы выше тройки не получил
Будьте так добры, развейте свою мысль, а то я как-то не врубаюсь
_Ivana
2177 / 1382 / 124
Регистрация: 01.03.2013
Сообщений: 4,120
Записей в блоге: 2
30.11.2014, 17:33     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #9
Байт, хотел найти тему, в которой приводил свой код для подобной (или точно такой же, их тут полно однотипных) задачки, но за пару секунд не нашел. Код, как водится, в 2 строчки (ну вы знаете ), рекурсия, никаких "проверок каждого бедного i++", просто генерируется все возрастающие последовательности цифр с получением из них числа. Работает до неприличия быстро для любых N, в отличие от "i++". Если надо, могу таки поискать ту тему или темы, но основную мысль вроде развил.

Добавлено через 3 минуты
ЗЫ а кстати, форум настолько любезен, что сам показывает внизу темы релевантные ссылки - вот и она Найти все натуральные числа <= n, десятичная запись которых - строго упорядоченная последовательность
Теперь жду вашего мнения, ибо с другим уважаемым участником у нас даже вышла дискуссия по поводу того, что мой код "хоть и короче и лаконичнее в записи и выполняется быстрее, но все равно методически неверен"
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,911
30.11.2014, 17:58     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #10
_Ivana, топик, на который вы меня послали, конечно, любопытен, в основном тем, как благородные доны спорят о том, "у кого ширше галифе"
О том, что код можно (и очень здорово) оптимизировать - спору нет.
Но мне интересно, за что ж я схлопотал трояк (надеюсь, что все остальное безукоризненно)?
За неоптимальность?
Но я бы вам посоветовал обратить внимание на место, где мы находимся.
"С++ для начинающих"
Им хотя бы разобраться в простейших переборных алгоритмах...
_Ivana
2177 / 1382 / 124
Регистрация: 01.03.2013
Сообщений: 4,120
Записей в блоге: 2
30.11.2014, 18:06     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #11
Байт, ну хорошо хоть споры благородных донов вас позабавили Хотя полтора из них (по совокупности ) предложили заслуживающие внимания алгоритмы. Насчет неоптимальности - запустите ваш код и мой на каких-нибудь действительно больших числах, влезающих в лонг лонг, сравните скорость. Остальное у вас безукоризненно, поэтому зачет сдан Но и начинающим имхо тоже неплохо сразу видеть, что существуют не только прямые брутфорсные алгоритмы. А также научиться пользоваться поиском.
Байт
 Аватар для Байт
13955 / 8786 / 1222
Регистрация: 24.12.2010
Сообщений: 15,911
30.11.2014, 18:46     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #12
Цитата Сообщение от _Ivana Посмотреть сообщение
Запустите ваш код и мой
Верю на слово. Тем более, что это очевидно. В самом деле достаточно сгенерировать все сочетания из 10 по k(количество цифр), а из каждого сочетания число получается само собой. Что конечно-же значительно быстрее брут-форсного перебора
Цитата Сообщение от _Ivana Посмотреть сообщение
Но и начинающим имхо тоже неплохо сразу видеть,
Пожалейте их! Они еще ползать еле научились, а вы их хотите сразу научить ходить на руках. И от того, что они сразу увидят, не вылезут ли их глаза из орбит?
_Ivana
30.11.2014, 18:56
  #13

Не по теме:

Байт, у меня подобные симптомы с глазами наблюдаются в каждой второй теме в разделах языков функциональной парадигмы. Но это как раз должно мотивировать разобраться. Выложить несколько вариантов алгоритмов разной степени сложности, и пусть каждый выбирает на свой вкус. В некоторых других интересных темах этого раздела так и происходит, и имхо это хорошо.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2014, 00:10     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность
Еще ссылки по теме:

C++ Проверить что цифры данного трехзначного числа образуют возрастающую последовательность
Для каждого числа проверить, представляют ли его цифры строго возрастающую последовательность C++
Найти все натуральные числа <= n, десятичная запись которых - строго упорядоченная последовательность C++

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

Или воспользуйтесь поиском по форуму:
011
9 / 9 / 0
Регистрация: 28.11.2013
Сообщений: 146
01.12.2014, 00:10     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность #14
Цитата Сообщение от Байт Посмотреть сообщение
По поводу комментариев - что именно в коде непонятно?
Сам по себе код понятен. Непонятен алгоритм. Как Вы решали? Можете рассказать?
P.S. благодарю за доработку кода :)

Цитата Сообщение от _Ivana Посмотреть сообщение
в подобных задачках, будь я преподавателем, никто бы выше тройки не получил
Можно Вас попросить проиллюстрировать на примере? Как по-вашему должен выглядеть код такого for(i=1; i<n; i++) цикла? Ну или хотя бы что гуглить, чтобы разобраться :)
Yandex
Объявления
01.12.2014, 00:10     Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность
Ответ Создать тему
Опции темы

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