Остап1843
12.06.2022 16:07

Студенты решили сходить в поход в горы. Они заранее договорились, что сначала каждый человек в отдельности платит за определённые вещи, такие как: еда, проезд, напитки…, а затем, расходы делятся поровну. После похода расходы всех друзей суммируются, и происходит обмен деньгами так, чтобы итоговая стоимость для всех оказалась равной с точностью до одного цента. Напишите программу, которая, основываясь на списке расходов, определяет минимальную сумму денег, которая должна поменять хозяина, для того чтобы уравнять (с точностью до цента) расходы всех студентов.
Решите на python

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
DPK1403
29.12.2020 19:03
Запишу сначала за вас условие до конца:
Первая строка ввода содержит два числа A и B, разделенных пробелом (1 ≤ A, B ≤ 10 000 000).Выведите все возможные значения для количества емкостей по 60 литров, которые окажутся заполненными (в том числе одна возможно частично), в порядке возрастания или число −1, если значения A и B противоречат друг другу, то есть они были записаны неверно.

Теперь к вопросам по форме. 
Во-первых, если в условии указаны ограничения на входные данные, им можно верить, проверять, что 1 <= A, B <= 10000000 не обязательно. 
Во-вторых, научитесь пользоваться &&, ||, это позволит не дублировать код. 4 раза написанное else Console.WriteLine("-1"); не очень читать.

А уже теперь по сути.
Ваше условие противоречивости условия |50A - 70B| < 50 нехорошее. Если общий объем колы, например, 141, то A = 3, B = 3, но при этом |50A - 70B| = 60, что больше 50.

Смотрю дальше.
если 50A < 70B, то если 50A не делится на 60, то ответ [(50A - 49)/60] + 1 или [50A/60] + 1 (если это одно и то же, не важно). Это тоже как минимум не очевидно: представим, что [(70B-69)/60] + 1 оказался больше, чем [(50A-49)/60] + 1. Тогда ответ точно неверен.

Какие были бы мои рассуждения:
Поищем, какое могло бы быть общее количество колы. Пусть её N, тогда
50(A - 1) < N <= 50A
70(A - 1) < N <= 70B
Тогда max(50A - 50, 70B - 70) < N <= min(50A, 70B). 
Если max(50A - 50, 70B - 70) >= min(50A, 70B), то решений нет, надо выводить -1. Иначе думаем дальше.
Строгое неравенство иметь что-то не хочется, сделаем из него нестрогое. Если добавлю к левой части 1, то количество 60-литровых ёмкостей явно не поменяется, зато неравенство станет нестрогим. Пусть так и будет, раз ответ не меняется. Только в проверке равенство поменяю на строгое.
max(50A - 50, 70B - 70) + 1 <= N <= min(50A, 70B)
Теперь просто считаем число ёмкостей слева, справа, и выводим все числа от первого до второго.

Поняв всё это, просто превращаем слова в программу.
using System;
class CocaCola
{
  public static void Main (string[] args)
  {
    int A = int.Parse(Console.ReadLine()), 
        B = int.Parse(Console.ReadLine());
    int lowerLimit = Math.Max(50 * A - 50, 70 * B - 70) + 1;
    int upperLimit = Math.Min(50 * A, 70 * B);
    if (lowerLimit > upperLimit)
    {
      Console.Write(-1);
      return;
    }
    for (int i = (int)Math.Ceiling(lowerLimit / 60.0); i <= Math.Ceiling(upperLimit / 60.0); i++)
      Console.Write("{0} ", i);
  }
}
0,0(0 оценок)
Ответ:
Cociheyuajnqhvedoxbs
12.07.2022 21:28

#include <iostream>

using namespace std;

int main()

{

   int number;

   int positive = 0;

   int negative = 0;

   int amount = 0;

   cin >> number;

   while (number != 0)

   {

       amount += number;

       if (number > 0)

       {

           positive++;

       }

       else if (number < 0)

       {

           negative++;

       }

       cin >> number;

   }

   cout << amount << endl << positive - negative;

}

Объяснение:

#include <iostream> // Библиотека ввода - вывода

using namespace std; // Пространство имён

int main()

{

   int number; // Целочисленная переменная для хранения вводимых с клавиатуры чисел

   int positive = 0; // Целочисленная переменная для хранения количества положительных чисел

   int negative = 0; // Целочисленная переменная для хранения количества отрицательных чисел

   int amount = 0; // Целочисленная переменная для хранения суммы чисел последовательности

   cin >> number; // Вводим число с клавиатуры

   while (number != 0) // Пока значение переменной number ≠ 0

   {

       amount += number; // Суммируем

       if (number > 0) // Если значение переменной number - положительное

       {

           positive++; // Добавляем единицу

       }

       else if (number < 0) // Если значение переменной number - отрицательное

       {

           negative++; // Добавляем единицу

       }

       cin >> number; // Вводим число с клавиатуры

   }

   cout << amount << endl << positive - negative; // Выводим сумму чисел последовательности и разность между количеством положительных и отрицательных

}

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота