0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 29
1

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

03.03.2014, 21:28. Показов 1930. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2014, 21:28
Ответы с готовыми решениями:

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

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

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

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

13
Модератор
Эксперт С++
12756 / 10218 / 6142
Регистрация: 18.12.2011
Сообщений: 27,358
03.03.2014, 21:50 2
C++
1
if((i/10)%10>=(j%10))
0
0 / 0 / 0
Регистрация: 21.10.2012
Сообщений: 29
03.03.2014, 22:36  [ТС] 3
Не работает. Выдает от 1 до 9 и все.
0
Диссидент
Эксперт C
27316 / 17038 / 3765
Регистрация: 24.12.2010
Сообщений: 38,366
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
10 / 10 / 1
Регистрация: 28.11.2013
Сообщений: 153
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
27316 / 17038 / 3765
Регистрация: 24.12.2010
Сообщений: 38,366
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
27316 / 17038 / 3765
Регистрация: 24.12.2010
Сообщений: 38,366
30.11.2014, 17:20 8
Цитата Сообщение от _Ivana Посмотреть сообщение
никто бы выше тройки не получил
Будьте так добры, развейте свою мысль, а то я как-то не врубаюсь
0
4816 / 2276 / 287
Регистрация: 01.03.2013
Сообщений: 5,939
Записей в блоге: 27
30.11.2014, 17:33 9
Байт, хотел найти тему, в которой приводил свой код для подобной (или точно такой же, их тут полно однотипных) задачки, но за пару секунд не нашел. Код, как водится, в 2 строчки (ну вы знаете ), рекурсия, никаких "проверок каждого бедного i++", просто генерируется все возрастающие последовательности цифр с получением из них числа. Работает до неприличия быстро для любых N, в отличие от "i++". Если надо, могу таки поискать ту тему или темы, но основную мысль вроде развил.

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

Не по теме:

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

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

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

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru