Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Helgi
0 / 0 / 2
Регистрация: 21.10.2012
Сообщений: 29
#1

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

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

Реализовать программу, которая находит все натуральные n-значные числа,цифры в которых образуют строго возрастающую последовательность(1234,2378,5789)
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;conio.h&gt; using namespace std;...

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

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

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

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

13
zss
Модератор
Эксперт С++
6952 / 6514 / 4135
Регистрация: 18.12.2011
Сообщений: 17,182
Завершенные тесты: 1
03.03.2014, 21:50 #2
C++
1
if((i/10)%10>=(j%10))
0
Helgi
0 / 0 / 2
Регистрация: 21.10.2012
Сообщений: 29
03.03.2014, 22:36  [ТС] #3
Не работает. Выдает от 1 до 9 и все.
0
Байт
Эксперт C
17758 / 11783 / 2448
Регистрация: 24.12.2010
Сообщений: 23,692
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 / 1
Регистрация: 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
17758 / 11783 / 2448
Регистрация: 24.12.2010
Сообщений: 23,692
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
17758 / 11783 / 2448
Регистрация: 24.12.2010
Сообщений: 23,692
30.11.2014, 17:20 #8
Цитата Сообщение от _Ivana Посмотреть сообщение
никто бы выше тройки не получил
Будьте так добры, развейте свою мысль, а то я как-то не врубаюсь
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
30.11.2014, 17:33 #9
Байт, хотел найти тему, в которой приводил свой код для подобной (или точно такой же, их тут полно однотипных) задачки, но за пару секунд не нашел. Код, как водится, в 2 строчки (ну вы знаете ), рекурсия, никаких "проверок каждого бедного i++", просто генерируется все возрастающие последовательности цифр с получением из них числа. Работает до неприличия быстро для любых N, в отличие от "i++". Если надо, могу таки поискать ту тему или темы, но основную мысль вроде развил.

Добавлено через 3 минуты
ЗЫ а кстати, форум настолько любезен, что сам показывает внизу темы релевантные ссылки - вот и она http://www.cyberforum.ru/cpp-beginners/thread1277403.html
Теперь жду вашего мнения, ибо с другим уважаемым участником у нас даже вышла дискуссия по поводу того, что мой код "хоть и короче и лаконичнее в записи и выполняется быстрее, но все равно методически неверен"
0
Байт
Эксперт C
17758 / 11783 / 2448
Регистрация: 24.12.2010
Сообщений: 23,692
30.11.2014, 17:58 #10
_Ivana, топик, на который вы меня послали, конечно, любопытен, в основном тем, как благородные доны спорят о том, "у кого ширше галифе"
О том, что код можно (и очень здорово) оптимизировать - спору нет.
Но мне интересно, за что ж я схлопотал трояк (надеюсь, что все остальное безукоризненно)?
За неоптимальность?
Но я бы вам посоветовал обратить внимание на место, где мы находимся.
"С++ для начинающих"
Им хотя бы разобраться в простейших переборных алгоритмах...
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
30.11.2014, 18:06 #11
Байт, ну хорошо хоть споры благородных донов вас позабавили Хотя полтора из них (по совокупности ) предложили заслуживающие внимания алгоритмы. Насчет неоптимальности - запустите ваш код и мой на каких-нибудь действительно больших числах, влезающих в лонг лонг, сравните скорость. Остальное у вас безукоризненно, поэтому зачет сдан Но и начинающим имхо тоже неплохо сразу видеть, что существуют не только прямые брутфорсные алгоритмы. А также научиться пользоваться поиском.
0
Байт
Эксперт C
17758 / 11783 / 2448
Регистрация: 24.12.2010
Сообщений: 23,692
30.11.2014, 18:46 #12
Цитата Сообщение от _Ivana Посмотреть сообщение
Запустите ваш код и мой
Верю на слово. Тем более, что это очевидно. В самом деле достаточно сгенерировать все сочетания из 10 по k(количество цифр), а из каждого сочетания число получается само собой. Что конечно-же значительно быстрее брут-форсного перебора
Цитата Сообщение от _Ivana Посмотреть сообщение
Но и начинающим имхо тоже неплохо сразу видеть,
Пожалейте их! Они еще ползать еле научились, а вы их хотите сразу научить ходить на руках. И от того, что они сразу увидят, не вылезут ли их глаза из орбит?
0
_Ivana
30.11.2014, 18:56
  #13

Не по теме:

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

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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