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

Вычисление количества необходимых рельсов для постройки ж/д необходимой длины

10.11.2015, 13:12. Показов 635. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача заключается в создании программы для вычисления кол-ва необходимых рельсов для постройки ж/д необходимой длины.
Мы предполагаем что изготовитель рельсов производит два вида рельсов разной длины. Задача заключается в вычислении кол-ва необходимых рельсов каждого вида для постройки ж/д. Длина рельсов не может быть изменена т.е. их нельзя урезать.
На входе программа получает два числа разделенных пробелом. Это длины различных моделей рельсов. Затем после новой строки, она получает на вход длину ж/д которую нужно построить. На выходе программа должна выводить кол-во возможных вариантов построения ж/д из разного кол-ва рельсов одного и/или другого вида, а также вывести в консоль все эти комбинации.
Вот пример:
Код
Track length:
10 13
Distance:
749
= 10 * 32 + 13 * 33
= 10 * 19 + 13 * 43
= 10 * 6 + 13 * 53
= 10 * 71 + 13 * 3
= 10 * 58 + 13 * 13
= 10 * 45 + 13 * 23
Total variants: 6
У меня всё получилось, однако код очень медленный:
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
#include <stdio.h>
 
int main(void) {
    //использую unsigned long long так как на входе могут быть огромные числа
    unsigned long long length=0;
    unsigned long long base_min,base_max;
    unsigned long long combs=0;
    _Bool reversed = 0;
    printf("Track length:\n");scanf("%llu %llu",&base_min,&base_max);
    if(base_min>base_max){
        //меняю переменные местами
        base_min = base_min ^ base_max;
        base_max = base_max ^ base_min;
        base_min = base_min ^ base_max;
        reversed = 1;
        }
    printf("Distance:\n");scanf("%llu", &length);
    for (unsigned long long factor = 1; factor <= (length/base_min); factor++) {
        if ((length/(base_min*factor)) >= 1 && ((length-(base_min*factor)) % base_max) == 0) {
            if(!reversed){
                printf("=%llu * %llu + %llu * %llu\n",base_min,factor,base_max,((length-(base_min*factor))/base_max));
            } else {
                    printf("=%llu * %llu + %llu * %llu\n",base_max,((length-(base_min*factor))/base_max),base_min,factor);
            }
            combs++;
        }
    }
    printf("Total variants: %llu\n", combs);
    return 0;
}
Прошу форумчан помочь мне его улучшить. Заранее благодарю!
P.S.: Я не проверяю входные данные на правильность. Для меня главное сейчас это оптимизация основного алгоритма, после чего дело останется за малым.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.11.2015, 13:12
Ответы с готовыми решениями:

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

Вычисление количества грамм исходной массы, необходимой для изготовления а штук тарелок
На изготовление одной тарелки идет P - грамм массы, на изготовление одной чашки идет k - грамм, на...

Вычисление количества грамм исходной массы, необходимой для изготовления а штук тарелок
Я плохо шарю в паскале и только недавно начал изучать его и дали вот такую задачу по линейным...

Вычисление количества рулонов обоев, необходимых для оклеивания комнаты
file:///home/user/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%20%D1%81%D1%82%D0%BE%D0%BB/%D0%A1%D0%BD...

1
0 / 0 / 1
Регистрация: 07.10.2014
Сообщений: 11
18.11.2015, 23:24  [ТС] 2
Код оптимизировал, тему можно закрывать.
0
18.11.2015, 23:24
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2015, 23:24
Помогаю со студенческими работами здесь

Приложение для расчета количества рулонов обоев, необходимых для оклейки стен комнаты.
Программа должна содержать форму, в которую работник вводит длину и ширину комнаты, высоту...

Оценка количества кирпичей, необходимых для строительства дома
Задание 1. Дом строят из кирпичей размером 250х120х65 мм, кирпичи кладут длинной стороной вдоль...

Макрос для подсчета количества необходимых элементов таблицы
Доброго времени суток! Когда-то давно в университете учили писать макросы, думал что не...

Вывод количества необходимых операции для получения заданного числа
Я задаю любое число (например число 32). И программа должна вывести на экран получение этого числа...

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

Определить минимальное количество отрезков единичной длины необходимых для того чтоб покрыть все точки
И снова здравствуйте.Условие:даны N точек с двойной точностью(точки заданные вещественными числами...


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

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

Новые блоги и статьи
Преобразование полей (элементов управления содержимым) в обычный текст
РоΜа 23.01.2025
Возникла необходимость преобразовать поля в текст (те, что на вкладке разработчик добавляются) . Помучившись родил следующее: Sub ПоляВТекст() Преобразует все поля в текст (даты, текст,. . .
Как проверить существование директории в скрипте Bash
bt_guru 23.01.2025
При разработке скриптов Bash одной из ключевых задач является корректная работа с файловой системой, где особое место занимает проверка существования директорий. Эта операция становится критически. . .
Как работают срезы (slice) в Python
bytestream 23.01.2025
Python предоставляет разработчикам мощный и гибкий инструмент для работы с последовательностями данных - срезы (slices). Эта функциональность позволяет извлекать, модифицировать и управлять. . .
Как удалить подмодуль (submodule) в Git
bytestream 23.01.2025
При работе с крупными проектами в системе контроля версий Git разработчики часто сталкиваются с необходимостью управления зависимостями и внешними компонентами. Подмодули (submodules) представляют. . .
В чем разница между @staticmethod и @classmethod в Python. Декораторы методов
bytestream 23.01.2025
В Python декораторы методов представляют собой мощный инструмент, позволяющий модифицировать поведение функций и методов без изменения их исходного кода. Эта возможность является одной из. . .
Как преобразовать InputStream в String в Java
bytestream 23.01.2025
В мире Java-разработки работа с потоками данных является одной из ключевых операций при создании современных приложений. InputStream, как фундаментальный класс для обработки входных потоков данных,. . .
Как обновить форк (ответвление) репозитория в Git
bytestream 23.01.2025
Одним из наиболее мощных инструментов Git для организации совместной работы является механизм форкинга репозиториев, который позволяет создавать независимые копии проектов для дальнейшей разработки. . . .
Как работает async/await в C#. Асинхронное программировани­е в .NET
bytestream 23.01.2025
Введение в асинхронное программирование Асинхронное программирование представляет собой важнейшую концепцию современной разработки программного обеспечения, особенно в контексте создания. . .
КуМир: полное руководство
bytestream 23.01.2025
Введение в КуМир: история создания и назначение КуМир (Комплект Учебных МИров) представляет собой образовательную среду программирования, которая была создана для обучения основам алгоритмизации и. . .
Что такое OLAP. Где и как использовать многомерный анализ данных
bytestream 23.01.2025
Введение в OLAP-технологии В современном мире бизнес-аналитика и обработка больших массивов данных играют ключевую роль в принятии стратегических решений. Организации накапливают огромные объемы. . .
MongoDB: что это, для чего нужна и как использовать
bytestream 23.01.2025
Введение в MongoDB: современная документоориентированная СУБД В современном мире разработки программного обеспечения выбор правильной системы управления базами данных является критически важным. . .
Как использовать закрытый ключ шифрования в Git. Шифрование в Git
bytestream 23.01.2025
Установка и настройка закрытых ключей в Git предоставляет дополнительный уровень безопасности для работы с репозиториями. Для начала необходимо создать пару ключей, обычно это осуществляется с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru