Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 2
Регистрация: 05.03.2013
Сообщений: 31
1

Зная квалификацию игроков определить общее число подтягиваний, которое совершат оба игрока за время игры

19.03.2016, 19:18. Показов 577. Ответов 7
Метки нет (Все метки)

Пусть квалификация первого игрока равна A, а квалификация второго равна B. Обозначим
количество подтягиваний в подходе для первого игрока числом N, а для второго — числом M. В
первом подходе, в качестве обязательной разминки, оба игрока выполняют по одному подтягиванию
(т.е. изначально N = M = 1). После выполнения первого подхода обоими игроками вступает в силу
правило: если N × A < M × B, то число N увеличивается на единицу и первый игрок выполняет
подход, а если N × A > M × B, то число M увеличивается на единицу и второй игрок выполняет
подход. Исключительными являются ситуации, в которых либо один из игроков должен выполнить
второй подход подряд (без учета самого первого подхода), либо после завершения некоторого под-
хода выполняется условие N × A = M × B, — в этих случаях правило, описанное выше, перестает
действовать, и каждый игрок просто повторяет все свои подходы, выполняя их в обратном порядке,
после чего игра завершается.
В итоге, сам необходимый результат, который нужно получить звучит так: "зная квалификацию игроков, определить общее число подтягиваний, которое совершат оба игрока за время игры."
Начал выполнять данную программу.. Вот код..
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
#include <iostream>
#include <cstdio>
using namespace std;
int main (void)
{
    int i,a,b;
    int n=1;
    int m=1;
    setlocale(0, "");
    cout << "Введите квалификацию первого игрока: ";
    cin >> a;
    cout << "Введите квалификацию второго игрока: ";
    cin >> b;
  for (i=0; 1<=a and b<=(10)^9;i++) {
 
if (n*a < m*b) 
{
cout << (n*a) << " < " << (m*b) = (a+1) << endl;
} else 
{ 
cout << (n*a) << " > " << (m*b) = (b+1) << endl;
}
 
if (n*a = m*b)
{
cout << n*a << " > " << m*b = a+1 << endl;
}
[else return 1]
}
  printf ("Общее число подтягиваний совершаемые обоими игроками: %n+%m", (n+m));
 system ("pause");
  return 0;
}
В чем проблема? А бес её знает... Сам новичок еще, в итоге запутался.. Ну надеюсь начал правильно что нужны тут циклы и функция IF. Очень бы хотелось задачу на С++ и чтобы пошла на программе Dev C++.. В общем нужна помощь надеюсь попаду на знающего человека..
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2016, 19:18
Ответы с готовыми решениями:

Определить общее число и общее время удалений за время матча
В ходе хоккейного матча игроки обеих команд удалялись в общей сложности 24 раза. По каждому...

Наименьшее общее кратное (НОК) двух натуральных чисел – это наименьшее число, которое делится нацело на оба ис
Здравствуйте,помогите пожалуйста написать код,спасибо.Наименьшее общее кратное (НОК) двух...

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

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

7
16 / 16 / 13
Регистрация: 08.11.2014
Сообщений: 119
19.03.2016, 21:41 2
Сделайте ручной пример.
0
70 / 70 / 52
Регистрация: 24.01.2013
Сообщений: 198
20.03.2016, 03:29 3
Пример ввода Пример вывода
3 5 18
1 2 8
Не совсем понятно, как считаются подтягивания.
Если во втором случае еще более похоже на реальную "лесенку", где подтягивания идут так
1 1
2 2
1 1
так они в сумме и подтянутся 8 раз, но если в первом случае при 3 и 5 будет 18, непонятно..
Как я понимаю,
3 3
4 4
5 5
4 4
3 3
38 0_о
и да, автор, не
Цитата Сообщение от Castigador13 Посмотреть сообщение
1<=a and b<=(10)^9
а
C++
1
2
1 <= a && a <= 10
1 <= b && b <= 10
Добавлено через 53 минуты
Наконец-то..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main() {
    int n = 1, m = 1, a, b, counterM = 1, counterN = 1, crt1 = 0, crt2 = 0;
    while (a <= 0 || a > 10 || b <= 0 || b > 10){ // проверяем валидность ввода
        cout << "Enter qual a, b (1..10): ";
        cin >> a >> b;
    }
    while (a*n != b*m) {
        if (a*n < b*m && crt1 == 0) { 
           n++; counterN += n; // считаем подходы/количество подтягиваний и проверяем на повторный вход в if
            crt1++; crt2 = 0; // записываем в crt1 что здесь мы уже были, второй раз подряд нас сюда не пустит
        }
        else if(a*n > b*m && crt2 == 0){
           m++; counterM += m;
            crt2++; crt1 = 0; // аналогично
        }else break;
    }
    cout << "\n\nFirst: " << counterN*2 << "\nSecond: " << counterM*2 <<"\n\nSum: " << (counterN+counterM)*2<< endl;
    return 0;
}
0
0 / 0 / 0
Регистрация: 20.03.2016
Сообщений: 5
20.03.2016, 12:55 4
Сделал почти так же, но не проходит тест 23, ваш вариант точно так же не проходит 23
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
38
#include <iostream>
 
int main()
{
    int a = 0;
    int b = 0;
    int N = 1;
    int M = 1;
    int sum = 2;
    char last = 't';
    char prev = 't';
    std::cin >> a >> b;
    while (true) {
        prev = last;
        if (a * N < b * M) {
            N++;
            last = 'a';
            if (prev == last) {
                break;
            }
            sum += N;
            if(a * N == b * M)
                break;
        } else if (a * N > b * M) {
            M++;
            last = 'b';
            if (prev == last) {
                break;
            }
            sum += M;
                        if(a * N == b * M)
                break;
        } else break;
    }
    
    std::cout << sum * 2;
    
}
Добавлено через 7 минут
Написал еще на шарпе, не проходит тест 8
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
38
static void Main(string[] args)
        {
            long A = 0, B = 0;
            long N = 1;
            long M = 1;
            long result = 2;
            long[] input;
                input = StringToInt(Console.ReadLine());
                A = input[0];
                B = input[1];
           
            char a = ' ';
            while (true)
            {
                if (N * A < M * B)
                {
                    if (a == '1')
                        break;
                    N++;
                    result += N;
                    a = '1';
                    if (N * A == M * B)
                        break;
                }
 
                if (N * A > M * B)
                {
                    if (a == '2')
                        break;
                    M++;
                    result += M;
                    a = '2';
                    if (N * A == M * B)
                        break;
                }
            }
            Console.WriteLine(result * 2);
        }
0
70 / 70 / 52
Регистрация: 24.01.2013
Сообщений: 198
20.03.2016, 13:54 5
Цитата Сообщение от xOnL1ne Посмотреть сообщение
не проходит тест 23
В каком смысле не проходит? Всё правильно считает, 12 раз подтянется 1-й спортстмен, и 6 раз второй.

можем представить:
C++
1
2
3
4
5
6
   1 * 2 < 3 * 1    // начальное условие
1  2 * 2 > 3 * 1    // первое подтягивание за первым спортсменом
2  2 * 2 < 3 * 2  1 // 1-й спортстмен делает уже два подтягивания, в то время как второй делает только первое
3  3 * 2 = 3 * 2  2 // первый делает три подтягивания, второй делает  два, т.к. знак равенства - прекращаем увеличивать кол-во 
// итого: первый сделал 1+2+3 = 6, второй 1+2 = 3 , в одну сторону
//в обратную сторону просто умножаем на 2, 6*2 = 12, 3*2 = 6, в сумме 18
не понимаю, что неправильно
0
0 / 0 / 0
Регистрация: 20.03.2016
Сообщений: 5
20.03.2016, 14:03 6
drink-r16-ru.pdf это задание из олимпиады, и там после загрузки решения "Неверный ответ на тесте 23" если загрузать на с++, если С# то "Неверный ответ на тесте 8"
0
70 / 70 / 52
Регистрация: 24.01.2013
Сообщений: 198
20.03.2016, 14:20 7
Цитата Сообщение от xOnL1ne Посмотреть сообщение
Неверный ответ на тесте 23
вероятнее всего тест ожидает других решений, нежели описаны выше.

Не по теме:

И можно спросить, где вы проверяете?

0
0 / 0 / 0
Регистрация: 20.03.2016
Сообщений: 5
20.03.2016, 14:36 8
там закрытая олимпиада по програмированию
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2016, 14:36

определить общее число удалений и общее время всех удалений.
В ходе хоккейного матча игроки обеих команд удалялись в общей сложности 24 раза. По каждому...

Определить число дней с опозданиями и общее время опозданий
Здравствуйте ! Очень прошу помогите решить задачу по vba просто горю !за ранее благодарен всем кто...

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

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

Определить наименьшее время(число полных минут),которое должно пройти до того момента,когда часовая и минутная
Даны целые числа h,m (0&lt;h&lt;=12,0&lt;=m&lt;=59),указывающие момент времени: h часов,m минут.Определить...

Определить время окончания рабочего дня зная время начала и продолжительность
Доброго времени! Помогите, пожалуйста, решить задачку в Delphi :help: Дело в том, что пропала...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru