Професионална програма
Loading...
+ Нов въпрос
n.dimitrova avatar n.dimitrova -1 Точки

Задача Key Revolver

Здравейте, 

На тази задача ми дава 80 точки и не мога да намеря грешката. 

Условие на задачата: https://judge.softuni.bg/Contests/Practice/Index/1447#0 

Моето решение: https://pastebin.com/0Mwa1DdN

Тагове:
0
Module: C# Advanced
kkaraivanov avatar kkaraivanov 486 Точки
Best Answer

В условието пише, че трябва да презаредиш патрони след изтрелване на пълнителя "intsizeOfTheGunBarrel", а ти презареждаш на всяко завъртане на while цикъла. Прилагам примерно решение да сравниш.

            int priceOfBullet = int.Parse(Console.ReadLine());
            int gunBarrelSize = int.Parse(Console.ReadLine()); // count bullet in barrel
            var bullets = new Stack<int>(Console.ReadLine().Split().Select(int.Parse).ToArray());
            var locks = new Queue<int>(Console.ReadLine().Split().Select(int.Parse).ToArray());
            var intelligence = int.Parse(Console.ReadLine());

            int countBullet = bullets.Count;
            int counterBullet = 0;
            ;
            while (true)
            {
                if(bullets.Count == 0 || locks.Count == 0)
                    break;

                var bullet = bullets.Peek();
                var lok = locks.Peek();

                if (bullet <= lok)
                {
                    Console.WriteLine("Bang!");
                    locks.Dequeue();
                }
                else
                {
                    Console.WriteLine("Ping!");
                }

                bullets.Pop();
                counterBullet++;
                if (counterBullet == gunBarrelSize && bullets.Count != 0)
                {
                    counterBullet = 0;
                    Console.WriteLine("Reloading!");
                }
            }

            countBullet -= bullets.Count;
            var bulletsCost = countBullet * priceOfBullet;

            if (locks.Count == 0)
            {
                Console.WriteLine($"{bullets.Count} bullets left. Earned ${intelligence - bulletsCost}");
            }
            else
            {
                Console.WriteLine($"Couldn't get through. Locks left: {locks.Count}");
            }

Успех.

0
16/11/2020 09:01:03
n.dimitrova avatar n.dimitrova -1 Точки

Много благодаря за отговора! 

0
kkaraivanov avatar kkaraivanov 486 Точки

Нямах възможност да тествам кода в Judge, но връща коректно отговорите от документа. Ако несработи логиката, кажи да потърся друг вариант и откриване на грешките.

0
n.dimitrova avatar n.dimitrova -1 Точки

И в Judge твоя код дава 100/100. Всичко е точно!

0
Martinzca avatar Martinzca 11 Точки

Ето и едно примерно решение на Python:

from collections import deque
bullet_price = int(input())
size_barrel = int(input())

bullets = input().split(' ')
bullets = deque([int(item) for item in bullets])

org_bullets = deque(bullets)

locks = input().split(' ')
locks = deque([int(item) for item in locks])

intelligence = int(input())
shoot = 0

while bullets and locks:
    if bullets and shoot == size_barrel:
        print(f'Reloading!')
        shoot = 0
    if bullets[-1] <= locks[0]:
        print('Bang!')
        bullets.pop()
        locks.popleft()
        shoot += 1
    else:
        print('Ping!')
        bullets.pop()
        shoot += 1

if bullets and shoot == size_barrel:
    print(f'Reloading!')
    shoot = 0

if locks:
    print(f"Couldn't get through. Locks left: {len(locks)}")
else:
    cost = (len(org_bullets) - len(bullets)) * bullet_price
    profit = intelligence - cost
    print(f"{len(bullets)} bullets left. Earned ${profit}")

 

1