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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Helgi
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 29
#1

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

03.03.2014, 21:28. Просмотров 675. Ответов 13
Метки нет (Все метки)

/*
Найти натуральные числа меньше 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..), а, судя по условию, этого не должно быть. Подскажите, как от этого избавится? Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2014, 21:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти натуральные числа меньше N, цифры в записи которых образуют строго возрастающую последовательность (C++):

Найти все натуральные n-значные числа, цифры в которых образуют строго возрастающую последовательность - C++
Ребят,помогите сделать эту задачу через массивы.Я сделал через строки но мне сказали переделать ее через массивы Задача: Найти все...

Реализовать программу, которая находит все натуральные n-значные числа,цифры в которых образуют строго возрастающую последовательность(1234,2378,5789) - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;conio.h&gt; using namespace std; void swp(int &amp;i, int &amp;f) { int c1, c2,c3, n, f;//...

Найти количество чисел, цифры которых образуют строго возрастающую последовательность - C++
Я только начинаю программировать на C++ и поэтому мне нужна ваша помощь! Помогите решить следующую задачу: Программа вводит n...

Цифры данного четырехзначного числа N образуют строго возрастающую последовательность - C++
Помогите пожалуйста. Только начинаю программировать и что-то у меня не особо выходит. цифры данного четырехзначного числа N образуют...

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

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

13
zss
Модератор
Эксперт С++
6403 / 5969 / 1945
Регистрация: 18.12.2011
Сообщений: 15,377
Завершенные тесты: 1
03.03.2014, 21:50 #2
C++
1
if((i/10)%10>=(j%10))
0
Helgi
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 29
03.03.2014, 22:36  [ТС] #3
Не работает. Выдает от 1 до 9 и все.
0
Байт
Эксперт C
16144 / 10422 / 1552
Регистрация: 24.12.2010
Сообщений: 19,730
03.03.2014, 23:24 #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;
}
2
011
9 / 9 / 0
Регистрация: 28.11.2013
Сообщений: 152
30.11.2014, 16:40 #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-значные числа, цифры в которых образуют строго возрастающую последовательность"?
0
Байт
Эксперт C
16144 / 10422 / 1552
Регистрация: 24.12.2010
Сообщений: 19,730
30.11.2014, 17:06 #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;
}
По поводу комментариев - что именно в коде непонятно?
1
_Ivana
30.11.2014, 17:09
  #7

Не по теме:

Вот за это

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

0
Байт
Эксперт C
16144 / 10422 / 1552
Регистрация: 24.12.2010
Сообщений: 19,730
30.11.2014, 17:20 #8
Цитата Сообщение от _Ivana Посмотреть сообщение
никто бы выше тройки не получил
Будьте так добры, развейте свою мысль, а то я как-то не врубаюсь
0
_Ivana
3169 / 1786 / 153
Регистрация: 01.03.2013
Сообщений: 5,004
Записей в блоге: 2
30.11.2014, 17:33 #9
Байт, хотел найти тему, в которой приводил свой код для подобной (или точно такой же, их тут полно однотипных) задачки, но за пару секунд не нашел. Код, как водится, в 2 строчки (ну вы знаете ), рекурсия, никаких "проверок каждого бедного i++", просто генерируется все возрастающие последовательности цифр с получением из них числа. Работает до неприличия быстро для любых N, в отличие от "i++". Если надо, могу таки поискать ту тему или темы, но основную мысль вроде развил.

Добавлено через 3 минуты
ЗЫ а кстати, форум настолько любезен, что сам показывает внизу темы релевантные ссылки - вот и она Найти все натуральные числа <= n, десятичная запись которых - строго упорядоченная последовательность
Теперь жду вашего мнения, ибо с другим уважаемым участником у нас даже вышла дискуссия по поводу того, что мой код "хоть и короче и лаконичнее в записи и выполняется быстрее, но все равно методически неверен"
0
Байт
Эксперт C
16144 / 10422 / 1552
Регистрация: 24.12.2010
Сообщений: 19,730
30.11.2014, 17:58 #10
_Ivana, топик, на который вы меня послали, конечно, любопытен, в основном тем, как благородные доны спорят о том, "у кого ширше галифе"
О том, что код можно (и очень здорово) оптимизировать - спору нет.
Но мне интересно, за что ж я схлопотал трояк (надеюсь, что все остальное безукоризненно)?
За неоптимальность?
Но я бы вам посоветовал обратить внимание на место, где мы находимся.
"С++ для начинающих"
Им хотя бы разобраться в простейших переборных алгоритмах...
0
_Ivana
3169 / 1786 / 153
Регистрация: 01.03.2013
Сообщений: 5,004
Записей в блоге: 2
30.11.2014, 18:06 #11
Байт, ну хорошо хоть споры благородных донов вас позабавили Хотя полтора из них (по совокупности ) предложили заслуживающие внимания алгоритмы. Насчет неоптимальности - запустите ваш код и мой на каких-нибудь действительно больших числах, влезающих в лонг лонг, сравните скорость. Остальное у вас безукоризненно, поэтому зачет сдан Но и начинающим имхо тоже неплохо сразу видеть, что существуют не только прямые брутфорсные алгоритмы. А также научиться пользоваться поиском.
0
Байт
Эксперт C
16144 / 10422 / 1552
Регистрация: 24.12.2010
Сообщений: 19,730
30.11.2014, 18:46 #12
Цитата Сообщение от _Ivana Посмотреть сообщение
Запустите ваш код и мой
Верю на слово. Тем более, что это очевидно. В самом деле достаточно сгенерировать все сочетания из 10 по k(количество цифр), а из каждого сочетания число получается само собой. Что конечно-же значительно быстрее брут-форсного перебора
Цитата Сообщение от _Ivana Посмотреть сообщение
Но и начинающим имхо тоже неплохо сразу видеть,
Пожалейте их! Они еще ползать еле научились, а вы их хотите сразу научить ходить на руках. И от того, что они сразу увидят, не вылезут ли их глаза из орбит?
0
_Ivana
30.11.2014, 18:56
  #13

Не по теме:

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

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

Цитата Сообщение от _Ivana Посмотреть сообщение
в подобных задачках, будь я преподавателем, никто бы выше тройки не получил
Можно Вас попросить проиллюстрировать на примере? Как по-вашему должен выглядеть код такого for(i=1; i<n; i++) цикла? Ну или хотя бы что гуглить, чтобы разобраться :)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2014, 00:10
Привет! Вот еще темы с ответами:

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

.Определить количество чисел последовательности, у которых цифры образуют возрастающую последовательность. - C++
помогите пжалуйста не могу понять как написать программу на языке С++ 1.Определить количество чисел последовательности, у которых цифры...

Для каждого числа проверить, представляют ли его цифры строго возрастающую последовательность - C++
Помогите пожалуйста разобраться в программе. Прокоментируйте по строкам((((( Вводится последовательность целых чисел, 0 – конец ...

Проверить что цифры данного трехзначного числа образуют возрастающую последовательность - C++
1 Проверить истинность высказывания: &quot;Цифры данного трехзначного числа образуют возрастающую последовательность&quot; помогите написать...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
01.12.2014, 00:10
Ответ Создать тему
Опции темы

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