Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2019, 19:06   #1
anteletaceve
 
Регистрация: 25.03.2019
Сообщений: 5
По умолчанию Вывести на экран числа от 1000 до 9999 такие, что все цифры различны.

Вывести на экран числа от 1000 до 9999 такие, что все цифры различны.
anteletaceve вне форума Ответить с цитированием
Старый 25.03.2019, 19:13   #2
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

язык, примеры, наработки...?
или пиши на ip-man2013@yandex.ru
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 26.03.2019, 12:18   #3
Байтик
Пользователь
 
Регистрация: 21.12.2018
Сообщений: 28
По умолчанию

Можно генерировать все размещения из 10 по 4. Отбрасывая те, у которых на 1-м месте 0. Получает 9*9*8*7 = 4536 вариантов... Ммм... выигрыш по сравнению с тупым перебором (9000 вариантов) невелик... Так что в данном случае легче простым циклом...
Байтик вне форума Ответить с цитированием
Старый 26.03.2019, 16:13   #4
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 953
По умолчанию

4 вложенные цикла и сравнения

Код:
FOR a = 1 TO 9
    FOR b = 0 TO 9
        FOR c = 0 TO 9
            FOR d = 0 TO 9

                IF d = c THEN GOTO 5
                IF d = b THEN GOTO 5
                IF d = a THEN GOTO 5
                IF c = b THEN GOTO 5
                IF c = a THEN GOTO 5
                IF b = a THEN GOTO 5

                PRINT a; b; c; d,
                PRINT STR$(a) + STR$(b) + STR$(c) + STR$(d), ,

                e = VAL(MID$(STR$(a), 2, 1) + MID$(STR$(b), 2, 1) + MID$(STR$(c), 2, 1) + MID$(STR$(d), 2, 1))
                PRINT e

                SLEEP 1

            5 NEXT
        NEXT
    NEXT
NEXT
результаты в 3-ёх вариантах:
Код:
1 0 2 3        1 0 2 3       1023
1 0 2 4        1 0 2 4       1024
1 0 2 5        1 0 2 5       1025
и т.д. и т.п.
9 8 7 5        9 8 7 5       9875
9 8 7 6        9 8 7 6       9876
научиться переводить из basic на C#
возможно с помощью темы "Учим C# зная basic"
http://www.programmersforum.ru/showthread.php?t=327446
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 26.03.2019 в 18:01.
сфинкс вне форума Ответить с цитированием
Старый 26.03.2019, 16:44   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от сфинкс Посмотреть сообщение
4 вложенные цикла и сравнения
это просто жуткий ужас, а не код
Вас не учили, что Goto нынче не в моде?!
и что, на C# Вы такую же ересь пишете?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2019, 17:57   #6
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 953
По умолчанию

любое решение данной задачи будет включать
и циклы и сравнения и разделение на символы

и включается ... комбинаторика

ведь для 4-х точек возможны 6 сравнений

да и вариант без goto я и сам бы посмотрел
но наверняка будет длиннее моего варианта
созданного за 5 минут
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 26.03.2019 в 18:03.
сфинкс вне форума Ответить с цитированием
Старый 26.03.2019, 19:32   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от сфинкс Посмотреть сообщение
да и вариант без goto я и сам бы посмотрел
но наверняка будет длиннее моего варианта
сравнивайте (для простоты на вашем любимом бейсике)
Код:
FOR a = 1 TO 9
    FOR b = 0 TO 9
        FOR c = 0 TO 9
            FOR d = 0 TO 9

                IF (a <> b) and (a<>c) and (a<>d) and (b<>c) and (b<>d) and (c<>d)  THEN PRINT a*1000+b*100+c*10+d

             NEXT
        NEXT
    NEXT
NEXT
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2019, 19:56   #8
Байтик
Пользователь
 
Регистрация: 21.12.2018
Сообщений: 28
По умолчанию

Смотреть на такие коды - одно удовольствие! Сразу повышается самооценка. Причем язык, то есть способ выражения мыслей, совершенно не важен. Главное, что мысли весьма глубоки.
Вопрос к знатокам. А если будем проверять 5-значные - что, весь код будем заново писать?
Господа! Существуют хорошие алгоритмы генерации размещений. Чуть-чуть любопытства, и вам не придется показывать народу такие убогие чудовища.
СФИНКС, но картинка симпатичная.
Байтик вне форума Ответить с цитированием
Старый 26.03.2019, 20:42   #9
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 953
По умолчанию

если "повышается самооценка" значит "самооценка" низкая

а если бы в задаче было 8 цифр тогда было бы 28 сравнений
значит лучше придумывать другие алгоритмы универсальнее

предполагаю через массив
ведь моя анимация выше в теме
явно создаёт таблицу попарных сравнений
и по прошествии 3-х часов изучаем что получилось

для любого числа цифр вводимых в начале

Код:
INPUT "NUMBERS ", x
'x=5
DIM v(x)

FOR n = 10 ^ (x - 1) TO 10 ^ x - 1
    n$ = STR$(n)

    FOR i = 1 TO x
        v(i) = VAL(MID$(n$, i + 1, 1))
    NEXT

    e$ = ""
    q = 1

    FOR d = 1 TO x - 1
        FOR a = d + 1 TO x
            IF v(d) = v(a) THEN q = 0
        NEXT
    NEXT

    IF q = 1 THEN FOR z = 1 TO x: e$ = e$ + MID$(STR$(v(z)), 2, 1): NEXT: PRINT VAL(e$): SLEEP 1
NEXT
END
вкратце: как в моём примере в начале
многозначное число разделяется на разряды
и разряды сравниваются между собой как пирамида



и ещё найдены страницы про комбинации
http://rosettacode.org/wiki/Combinations#C.23
http://rosettacode.org/wiki/Combinat...petitions#C.23
из сборника полезного для обучения
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 27.03.2019 в 10:52.
сфинкс вне форума Ответить с цитированием
Старый 27.03.2019, 10:42   #10
Байтик
Пользователь
 
Регистрация: 21.12.2018
Сообщений: 28
По умолчанию

Код:
#include <iostream>
using namespace std;
int main()
{
    for (int i = 1000; i <= 9999; i++)  //range 1000-9999
    {
        int a = i, k, p=1000; 
        int b[10] = {0,0,0,0,0,0,0,0,0,0}; //массив с 10 нулями 
         for(k=0; k<4; k++, p /= 10)                                     
        {
            int d = a/p;
            b[d]++; 
            if (b[d] > 1) break; 
            a %= p;
        }
        if (k==4) {  // Цикл дошел до конца, а совпадов цифр не было
            cout << i << "\n";
        }
        else {
            i += p-1;  // Большой прыжок
        }
    }
    return 0;
}
Байтик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Visual Basic 6.0] Проверить, все ли цифры данного натурального числа N различны Firstaid Помощь студентам 5 27.04.2018 16:40
Вывести на экран такие трехзначные числа, у которых 1-я цифра равна 2-ой и они равны половине 3-ей lavrentev Помощь студентам 7 17.02.2017 10:17
Дано натуральное число n (n < 9999). Выяснить, различны ли все четыре цифры этого числа fanatloko Паскаль, Turbo Pascal, PascalABC.NET 5 23.06.2013 21:01
Программа ,позволяющая проверить,все ли цифры натурального числа M различны. Swetic Помощь студентам 1 24.05.2013 13:08
в интервале (1000 .. 9999) найти все простые числа (Delphi) Dima170792 Помощь студентам 10 04.05.2011 22:24