Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36

Задача про драконов

19.01.2014, 11:24. Показов 3203. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие:
Кликните здесь для просмотра всего текста

У каждой S-ножки 1 голова. Найти количество ног N у K-главого дракона, если у всех вместе A голов и B ног.

Технические условия

Входные данные
4 числа: S, K, A, B. Все числа не превышают 1000.


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


Пример входных данных
4 7 35 36

Пример выходных данных
2


Я написал код, но он не проходит 1 тест...
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
using System;
namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           string[] inputStr = Console.ReadLine().Split(' ');
 
           decimal countOfBugsLegs = Convert.ToDecimal(inputStr[0]);
           decimal countOfDragonsHeads = Convert.ToDecimal(inputStr[1]);
           decimal allHeads = Convert.ToDecimal(inputStr[2]);
           decimal allLegs = Convert.ToDecimal(inputStr[3]);
           decimal countOfDragonsLegs = -1;
           int flag = 0;
           
           for (countOfDragonsLegs = 0; countOfDragonsLegs * allHeads < allLegs * countOfDragonsHeads && countOfDragonsLegs < countOfBugsLegs * countOfDragonsHeads; countOfDragonsLegs++)
           {
               decimal X = (allLegs * countOfDragonsHeads - countOfDragonsLegs * allHeads) / (countOfBugsLegs * countOfDragonsHeads - countOfDragonsLegs);
               decimal Y = (countOfBugsLegs * allHeads - allLegs) / (countOfBugsLegs * countOfDragonsHeads - countOfDragonsLegs);
 
               if (Math.Floor(X) == X && Math.Floor(Y) == Y)
               {
                   flag = 1;
                   break;
               }
           }
           if (flag != 1)
           {
               countOfDragonsLegs = -1;
           }  
           
           Console.WriteLine(countOfDragonsLegs);
 
      }
   }
}
X - Количество драконов
Y - Количество многоножек

Формулы для X и Y получил в результате выражения их из системы 2х уравнений:
{ allLegs = countOfBugsLegs * Y + countOfDragonsLegs * X
{ allHeads = countOfDragonsHeads * X + Y

Помогите, пожалуйста, разобраться почему решение не проходит 1 тест..
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.01.2014, 11:24
Ответы с готовыми решениями:

Задача про спортсмена
Начав тренировки, спортсмен в первый день пробежал 10 км. Каждый день он увеличивал дневную норму на 10% нормы предыдущего дня. Какой...

Задача про строку
Распечатать введенную строку, заменив строчные буквы прописными и повторив дважды каждую цифру. Как решить покороче, чтобы не...

Задача про мишень
Здравствуйте! Мне в колледже задали такую задачу по C#: В системе координат X, Y «нарисована» мишень на 10 кругов с центром в начале...

20
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
19.01.2014, 14:27
я решительно не могу понять условие >_<
0
14 / 14 / 3
Регистрация: 07.01.2014
Сообщений: 37
19.01.2014, 16:17
Drakon5999, может попробуете через файл? Пример кода
0
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
19.01.2014, 18:57  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
я решительно не могу понять условие >_<
Я тоже не сразу понял

Добавлено через 59 секунд
Цитата Сообщение от ПрограммерООП Посмотреть сообщение
Drakon5999, может попробуете через файл? Пример кода
Хорошо, через пару часов буду дома и попробую..

Добавлено через 2 часа 26 минут
Цитата Сообщение от ПрограммерООП Посмотреть сообщение
Drakon5999, может попробуете через файл? Пример кода
Попробовал... Результат тот же.. Узнал, что ответом на этот тест является какое то число > 2 (и не -1)
0
14 / 14 / 3
Регистрация: 07.01.2014
Сообщений: 37
19.01.2014, 19:41
Ерунда...ведь в условии описано же, да и под задачу подходит...попробуйте написать в обратную связь.
0
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
19.01.2014, 19:57  [ТС]
Цитата Сообщение от ПрограммерООП Посмотреть сообщение
Ерунда...ведь в условии описано же, да и под задачу подходит...попробуйте написать в обратную связь.
"Ваше сообщение отправлено администрации сайта. Мы постараемся ответить Вам в ближайшее время!"

Добавлено через 56 секунд
До этого писал им, когда были проблемы с восстановлением пароля, они не ответили... Пришлось вспоминать пароль...
0
14 / 14 / 3
Регистрация: 07.01.2014
Сообщений: 37
20.01.2014, 01:00
Drakon5999, если ответят дайте знать, стало интересно, вдруг Мы что то упустили
0
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
20.01.2014, 07:57  [ТС]
Цитата Сообщение от ПрограммерООП Посмотреть сообщение
Drakon5999, если ответят дайте знать, стало интересно, вдруг Мы что то упустили
Хорошо
0
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
25.01.2014, 23:27  [ТС]
Вот прошла почти неделя, но ответа не последовало ((
Ни у кого, случайно, идеи не появились?
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
26.01.2014, 02:19
Drakon5999, вот вроде рабочий. С тестом не совпало, но как помне там ошибка
C#
1
2
3
4
5
6
7
8
9
static void Main(string[] args)
{
    if (args.Length != 4) throw new Exception("Please, input four integer values");
    int[] ints = Array.ConvertAll(args, int.Parse);
    int S = ints[0], K = ints[1], A = ints[2], B = ints[3],
        N = B - (A - K) * S;
    Console.Write(N < 0 ? -1 : N);
    Console.ReadKey();
}
0
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
26.01.2014, 13:37  [ТС]
Но ведь 50% пользователей её как то решили...
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
26.01.2014, 20:20
Drakon5999, так работает?
Кликните здесь для просмотра всего текста
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
using System;
 
namespace A
{
    class Program
    {
        static void Main()
        {
            int S = 4, K = 7, A = 35, B = 36;
            solve(S, K, A, B);
            Console.ReadKey();
        }
 
        private static void solve(int S, int K, int A, int B)
        {
            for (int dragonLeg = 0; dragonLeg < Math.Max(A, B); dragonLeg++)
            {
                var x = S * A - B;
                var y = K * S - dragonLeg;
                if ((y > x) || (y == 0)) continue;
                if (x % y != 0) continue;
                var dn = (x / y);
                var mn = (B - dragonLeg * dn) / S;
                if ((dn < 0) || (mn < 0)) continue;
                Console.WriteLine("{0}", dragonLeg, dn, mn);
                return;
            }
            Console.WriteLine(-1);
        }
 
    }
}
1
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
26.01.2014, 20:36  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
Drakon5999, так работает?
На 3 и 6 тест выдает неверный ответ..
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
26.01.2014, 21:08
Лучший ответ Сообщение было отмечено Drakon5999 как решение

Решение

Цитата Сообщение от Drakon5999 Посмотреть сообщение
На 3 и 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
31
using System;
 
namespace A
{
    class Program
    {
        static void Main()
        {
            int S = 4, K = 7, A = 35, B = 36;
            solve(S, K, A, B);
            Console.ReadKey();
        }
 
        private static void solve(int S, int K, int A, int B)
        {
            for (int dn = 1; dn < 1000; dn++)
            {
                for (int mn = 1; mn < 1000; mn++)
                {
                    if (A != K * dn + mn) continue;
                    if ((B - S * mn) % dn != 0) continue;
                    var dragonLeg = (B - S * mn) / dn;
                    if (dragonLeg <= 0) continue;
                    Console.WriteLine("{0}", dragonLeg);
                    return;
                }
            }
            Console.WriteLine(-1);
        }
    }
}
может конечно там еще какие то граничные условия есть типа
Кликните здесь для просмотра всего текста
C#
1
2
if (dragonLeg > A) continue;
if (dragonLeg > B) continue;
поиграть надо с ними
1
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
26.01.2014, 21:28  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
Тогда тупо перебрать.
Этот вариант не проходит 4 тест...
При условии
C#
1
if (dragonLeg > A) continue;
не проходит еще и 6
а условие
C#
1
if (dragonLeg > B) continue;
не на что не влияет..

Видимо в моем решение что то не так с условием в цикле...
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
26.01.2014, 21:34
Цитата Сообщение от Drakon5999 Посмотреть сообщение
При условии
Код C#
1
if (dragonLeg > A) continue;
не проходит еще и 6
В приципе логично. Ноги с головами сравнивать не стоит
0
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
26.01.2014, 21:42  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
Тогда тупо перебрать.
Безногие драконы существуют!)
после замены
C#
1
if (dragonLeg <= 0) continue;
на
C#
1
if (dragonLeg < 0) continue;
прошло все тесты!)
Можете, пожалуйста, прокомментировать код..
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
26.01.2014, 21:56
Цитата Сообщение от Drakon5999 Посмотреть сообщение
Можете, пожалуйста, прокомментировать код
Весь? Или чтото конкретное?
0
3 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 36
26.01.2014, 21:59  [ТС]
Цитата Сообщение от pycture Посмотреть сообщение
Весь? Или чтото конкретное?
Начиная от
C#
1
for (int dn = 1; dn < 1000; dn++)
включительно..
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
26.01.2014, 22:09
Лучший ответ Сообщение было отмечено Drakon5999 как решение

Решение

dn- кол-во драконов [1..1000]
mn- кол-во многоножек [1..1000]
для каждого dn и mn
C#
1
2
3
4
5
6
if (A != K * dn + mn) continue; //  общая сумма голов А должна удовлетворять равенству (голов_на_драконе * кол-во драконов + кол-во многоножек), если нет то в начало цикла для проверки  (кол-во многоножек + 1) 
if ((B - S * mn) % dn != 0) continue; //  это из равества для общего кол-ва ног B = ... проверяем что кол-во ног которое мы посчитаем не будет дробным числом, иначе в начало цикла для проверки  (кол-во многоножек + 1) 
var dragonLeg = (B - S * mn) / dn; // считаем кол-во ног
if (dragonLeg <= 0) continue; // отсекаем граничные условия
Console.WriteLine("{0}", dragonLeg); // выводим и выходим
return;
если ниче не нашлось в циклах то выводим -1
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.01.2014, 22:09
Помогаю со студенческими работами здесь

Задача про лыжника
Готовясь к соревнованиям, лыжник в первый день побежал 10 км, затем каждый день увеличивал расстояние на 10%. Сколько километров пробежал...

Задача про парикмахера
Для каждого посетителя парикмахерской (с одним мастером) известны следующие величины: t – момент его прихода и τ – продолжительность...

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

Задача про бутылки
Есть бутылки с разным количеством литров. Первое число при вводе - количество бутылок, второе - сколько в ней литров. Если бутылка пустая...

задача про прямые
Прямая на плоскости может быть задана уравнением ax + by = c, где a, b одновременно не равны нулю, a, b, c — целые. Пусть даны коэффициенты...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru