Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 28.11.2021
Сообщений: 26

Расставить все десять цифр 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 так, чтобы получившееся число делилось на все числа от 2 до 18

18.05.2022, 09:50. Показов 3130. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача о десяти цифрах. Расставьте все десять цифр 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 в таком порядке, чтобы получившееся число делилось на все числа от 2 до 18. Если, например, разместить цифры в последовательности 1 274 953 680, то получившееся число будет делиться на 2, 3, 4, 5 и т. д. до 16, но не разделится на 17.
Нужен код на С, принцип рекурсии. Желательно понятный код для первокурсника)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2022, 09:50
Ответы с готовыми решениями:

Задача о десяти цифрах. Расставьте все десять цифр 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 в таком порядке, чтобы получившееся числ
Задача о десяти цифрах. Расставьте все десять цифр 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 в таком порядке, чтобы получившееся число делилось на все...

Заменить любую цифру числа так, чтобы полученное число делилось на наибольшее количество своих цифр
Дано натуральное число. Заменить любую его цифру так, чтобы полученное число делилось на наибольшее количество своих цифр. Нужно написать...

Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18 включительно.
Дана задача. Выставить цифры в числе 1234567890 таким образом, чтобы новое число делилось без остатка на все числа от 2 до 18...

25
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
21.05.2022, 07:41
Студворк — интернет-сервис помощи студентам
Как я понимаю и результат у меня:
Code
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
1274953680
1467385920
1529367840
1597836240
1674953280
1845763920
1849367520
1925763840
2185943760
2189547360
2438195760
2459817360
2791348560
2834591760
2916753840
3195672480
3241798560
3274951680
3421978560
3429185760
3561798240
3579816240
3674951280
3691527840
3785942160
3845761920
3925761840
4173689520
4395671280
4573689120
4678193520
4753869120
4836751920
4876391520
5132967840
5197832640
5321796480
5418372960
5429183760
5467381920
5481796320
6123957840
6179453280
6375489120
6458371920
6483597120
6735849120
6843957120
7123596480
7132965840
7159632480
7165398240
7245398160
7389542160
7529361840
7691523840
7849361520
8137649520
8357469120
8461973520
8537649120
8791342560
9135846720
9153864720
9157468320
9175486320
И если результаты выше у меня уже правильны, то предлагаю предварительный код без рекурсии:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdbool.h>
bool chk(long long n)
{
    int m[10], k = 0;
    while (n)
    {
        m[k++] = n % 10;
        n /= 10;
    }
    for (int i = 0; i < 9; i++)
        for (int j = i + 1; j < 10; j++)
            if (m[i] == m[j]) return false;
    return true;
}
int main()
{
    for (long long i = 1000000000; i < 10000000000; i++)
        if (i % 720720 == 0 && chk(i))
            printf("%lld\n", i);
    return 0;
}
Или код будет проще и быстрее если будет:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdbool.h>
bool chk(long long n)
{
    int m[10], k = 0;
    while (n)
    {
        m[k++] = n % 10;
        n /= 10;
    }
    for (int i = 0; i < 9; i++)
        for (int j = i + 1; j < 10; j++)
            if (m[i] == m[j]) return false;
    return true;
}
int main()
{
    for (long long i = 1274953680; i < 10000000000; i += 720720)
        if (chk(i)) printf("%lld\n", i);
    return 0;
}
Надеюсь все будет правильно !
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13229 / 6861 / 1827
Регистрация: 18.10.2014
Сообщений: 17,392
21.05.2022, 08:40
Цитата Сообщение от Volga_ Посмотреть сообщение
Как я понимаю и результат у меня:
Code
1
2
1274953680
...
Но 1274953680 не делится на 17.

Добавлено через 11 минут
Но идея зайти с этой стороны - действительно хорошая и намного менее заумная, чем возня с перестановками.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdbool.h>
#include <stdio.h>
 
bool check_has_all_digits(unsigned long long v)
{
  unsigned mask = 0;
 
  for (unsigned n = 10; n > 0; --n, v /= 10)
    mask |= 1u << (v % 10);
 
  return mask == 0x3FF;
}
 
int main()
{
  for (unsigned long long v = 1237476240; v < 10000000000; v += 12252240)
    if (check_has_all_digits(v))
      printf("%llu\n", v);
}
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
21.05.2022, 08:42
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Но 1274953680 не делится на 17.
Да, сейчас уже понял задачу !
Вот результат у меня (совпадается с вами):
Code
1
2
3
4
2438195760
3785942160
4753869120
4876391520
И предварительный код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdbool.h>
bool chk(long long n)
{
    int m[10], k = 0;
    while (n)
    {
        m[k++] = n % 10;
        n /= 10;
    }
    for (int i = 0; i < 9; i++)
        for (int j = i + 1; j < 10; j++)
            if (m[i] == m[j]) return false;
    return true;
}
int main()
{
    for (long long i = 1000000000; i < 10000000000; i++)
        if (i % 12252240 == 0 && chk(i))
            printf("%lld\n", i);
    return 0;
}
И оптимальный код (как я понимаю):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdbool.h>
bool chk(long long n)
{
    int m[10], k = 0;
    while (n)
    {
        m[k++] = n % 10;
        n /= 10;
    }
    for (int i = 0; i < 9; i++)
        for (int j = i + 1; j < 10; j++)
            if (m[i] == m[j]) return false;
    return true;
}
int main()
{
    for (long long i = 2438195760; i < 10000000000; i += 12252240)
        if (chk(i)) printf("%lld\n", i);
    return 0;
}
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
21.05.2022, 12:21
Volga_, Все хорошо, и идея здравая - пройти по всем числам, которые делятся на все, что нужно.
(Кстати, без ложной скромности замечу, что идея в этом топике уже была высказана и реализована в посте 19)
Но мне не очень нравится твоя функция chk. Совпадение цифр можно понять раньше определения всех. И это сделано в том же посте 19
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
21.05.2022, 14:40
Байт, спасибо, я уже не заметил твой этот пост, да, конечно, ты прав. Ну вроде оба функции у тебя и у TheCalligrapher не совсем быстрее чем у меня (я попробовал тестировать их. Не уверен и не понял почему), может быть нужны объяснения здесь !
0
 Аватар для analogov net
2532 / 1130 / 495
Регистрация: 17.11.2018
Сообщений: 2,840
25.05.2022, 19:57
Лучший ответ Сообщение было отмечено Domik как решение

Решение

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
#define DIV      12252240     // 2*3*4*5*6*7*11*13*17
#define MAX_NUM  9876543210
#define MIN_NUM  1234567890
 
bool unique_digits( size_t n )
{
    int arr[10] = {0};
 
    for( ; n; n /= 10 )
        arr[n % 10]++;
 
    for( int i = 0; i < 10; i++ )
        if( arr[i] != 1 )
            return false;
 
    return true;
}
 
void solve( size_t n )
{
    if( n > MAX_NUM )         return;
    if( unique_digits( n ) )  printf( "%zu\n", n );
 
    solve( n + DIV );
}
 
int main()
{
    solve( MIN_NUM / DIV * DIV );
    return 0;
}
Взято здесь:
Задача о десяти цифрах. Расставьте все десять цифр 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 в таком порядке, чтобы получившееся числ

Только вывод поправил...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2022, 19:57

Исключить из числа n все чётные цифры и вывести получившееся число (0 — четная цифра)
3. С клавиатуры вводится натуральное число n. Исключить из числа n все чётные цифры и вывести получившееся число (0 — четная цифра)....

Расставить знаки +/- среди заданного набора цифр так, чтобы результатом вычисления получилось заданное число
(Консольное приложение) Дано натуральное число m. Вставить между некоторыми цифрами 1,2,3,4,5,6,7,8,9 записанными именно в таком...

Дано многозначное число. Верно ли, что в его записи используются все десять цифр?
Дано многозначное число. Верно ли, что в его записи используются все десять цифр?

Как сделать так чтобы выводились все числа после запятой? Вывести больше 17 значащих цифр
double x = 29178301791.20042003, y, c, c1, z1, z2, k; Console.WriteLine(&quot;x = &quot; + x.ToString());

Рекурсия: расставить 5 ферзей так, чтобы все поле 8*8 находилось под ударом
на шахматной доске (8*8) требуется расставить 5 ферзей так, чтобы все поле находилось под ударом. Будьте добры, помогите, пожалуйста найти...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru