Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/125: Рейтинг темы: голосов - 125, средняя оценка - 4.50
34 / 25 / 8
Регистрация: 16.11.2019
Сообщений: 179

Построить новое число по указанным правилам

08.03.2020, 13:41. Показов 25182. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Андрей готовился к ЕГЭ по информатике и встретил в демо-версии ЕГЭ 2015 года такую задачу:

Автомат получает на вход четырёхзначное число. По этому числу строится новое число по следующим правилам.

Складываются первая и вторая, а также третья и четвёртая цифры исходного числа.
Полученные два числа записываются друг за другом в порядке убывания (без разделителей).
Пример. Исходное число: 3165. Суммы: 3+1=4;6+5=11. Результат: 114.

Укажите наименьшее число, в результате обработки которого автомат выдаст число 1817.

Андрей решил, что для самопроверки он напишет программу, которая решает подобную задачу. Мы думаем, что вы тоже с этим справитесь.

Входные данные

Программа получает на вход некоторое натуральное число N, которое может содержать две, три или четыре цифры.

Выходные данные

Программа должна вывести такое наименьшее целое четырёхзначное число K, после применения к которому описанного выше алгоритма получается число N. Если же такого числа не существует, программа должна вывести число 0.

Вот мой код:
Python
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
#n = int(input())
n = 91
 
if len(str(n)) ==  2:
    a = n // 10 % 10
    b = n // 1 % 10
    print('1' + str(a - 1) + '0' + str(b))
 
elif len(str(n)) == 3:
    a = n // 100 % 10
    b = n // 10 % 10
    c = n // 1 % 10
    ab = str(a) + str(b)
    print(str(int(ab) - 9) + '9' + '0' + str(c))
 
else:
    a = n // 1000 % 10
    b = n // 100 % 10
    c = n // 10 % 10
    d = n // 1 % 10
    ab = str(a) + str(b)
    cd = str(c) + str(d)
    if len(str(int(cd))) == 1:
        print(str(int(ab) - 9) + '9' + '0' + str(int(cd)))
    else:
        if int(str(int(ab) - 9) + '9') < int(str(int(cd) - 9)):
            print(str(int(ab) - 9) + '9' + str(int(cd) - 9) + '9')
        else:
            print(str(int(cd) - 9) + '9' + str(int(ab) - 9) + '9')
Пишет, что задача решена неверно, но вроде я по составлял тестов и она все проходит. Подскажите плиз чем ошибка.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2020, 13:41
Ответы с готовыми решениями:

Построить массив В[6], следуя указанным правилам
Построить массив В по следующему правилу: В присвоить количество нулевых элементов главной диагонали, В присвоить количество нулевых...

Построить массив В(7), следуя указанным правилам
Дан массив A. Построить массив В(7) по следующему правилу: В(I) присвоить 1, если в I-той строке массива представляют возрастающую...

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

25
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.03.2020, 19:07
Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
n = 114
for i in range(1000, 10000):
    # Исходное число: 3165. Суммы: 3+1=4;6+5=11. Результат: 114.
    j = i
    i4 = j % 10
    j //= 10
    i3 = j % 10
    j //= 10
    i2 = j % 10
    j //= 10
    i1 = j
    s1 = i1 + i2
    s2 = i3 + i4
    if s1 > s2:
        assert s2 < 10, s2
        s = s1 * 10 + s2
    else:
        assert s1 < 10, s1
        s = s2 * 10 + s1
    if s == n:
        print(i)
0
1 / 1 / 0
Регистрация: 17.02.2019
Сообщений: 12
14.03.2020, 14:01
Цитата Сообщение от Reanimator23 Посмотреть сообщение
Ответил на этот вопрос в другой ветке, пусть и тут мой вариант будет. )
Способов решения мало не бывает, так сказать. )

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def numb_search(NUMB, RES):
    for i in range(1, 9001):
        X = int(str(10000 - i)[0]) + int(str(10000 - i)[1])
        Y = int(str(10000 - i)[2]) + int(str(10000 - i)[3])
        if X >= Y:
            if int(str(X) + str(Y)) == NUMB:
                RES = 10000 - i
        else:
            if int(str(Y) + str(X)) == NUMB:
                RES = 10000 - i
    return RES
 
 
NUMB = int(input("Введите двух/трех/четырехзначное число\n"))
RES = 0
RES = numb_search(NUMB, RES)
if RES == 0:
    print("Такого числа не существует")
else:
    print("Наименьшее четырехзначное число равно %i" % RES)
Можно сделать еще лучше (без индексов):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def plssearch(NUMBER, RESULT):
    for i in range(1, 9001):
        x = (10000 - i) // 1000 + (10000 - i) // 100 % 10
        y = (10000 - i) // 10 % 10 + (10000 - i) % 10
        if x >= y:
            if int(str(x) + str(y)) == NUMBER:
                RESULT = 10000 - i
        else:
            if int(str(y) + str(x)) == NUMBER:
                RESULT = 10000 - i
    return RESULT
 
 
numb = int(input())
res = 0
res = plssearch(numb, res)
if res == 0:
    print(0)
else:
    print(res)
0
34 / 25 / 8
Регистрация: 16.11.2019
Сообщений: 179
14.03.2020, 14:02  [ТС]
не могли бы помочь решить эту задачу без массивов?
0
1 / 1 / 0
Регистрация: 17.02.2019
Сообщений: 12
14.03.2020, 14:06
Можно сделать еще лучше (без индексов). Как это сделать - догадайся сам
0
0 / 0 / 0
Регистрация: 10.03.2020
Сообщений: 2
16.03.2020, 20:19
Вот вроде всё по замыслу, но что-то упустил.
Буду благодарен за конструктивные комменты
Python
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
n=int(input())
if n<100:
    a1=n%10
    a2=n//10
if n>=100 and n<1000:
    a1=n%10
    a2=n//10
if n>=1000:
    a1=n%100
    a2=n//100
print(a1,a2)
if a1<=18 and a2<=18 and a1<a2:
    
    if a1<10:
        a3=1
        a4=a1-1
    else:
        a3=a1-9
        a4=9
    if a2<10:
        a5=1
        a6=a2-1
    else:
        a5=a2-9
        a6=9
    print(a3,a4,a5,a6)
    end=str(a3)+str(a4)+str(a5)+str(a6)
    print(end)
else:
    print(0)
0
Заблокирован
16.03.2020, 21:08
Кто с Сириуса и решил 30, 37, 40 задачи меняюсь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.03.2020, 21:08

Определить чему равно число полученное по указанным правилам
Дано пятизначное число А. Шестизначное число В получается добавлением единицы справа от числа А. Определить, чему равно число А, если...

Дано натуральное число N. Построить новое число удалением из числа N нечетных цифр
Дано натуральное число N. Построить новое число удалением из числа N нечетных цифр. Мне нужно это сделать в Паскале. Например, если ввожу N...

Сформировать матрицу по указанным правилам
Получить действительную матрицу {A(i,j)}, при i, j=1, ..., 7, первая строка которой задается формулой A(1,j0=2*j+3 , при j = 1, ..., 7,...

Сформировать матрицу по указанным правилам
Записать в одну программу код с использованием многомерного массива Запрещено размещать задания в виде картинки. Перепечатайте текстом...

Заполнить матрицы по указанным правилам
Напишите программу, в которой объявляется массив размером 5х10 и массив размером 5х5. Первый массив заполняется случайными числами, в...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru