Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/55: Рейтинг темы: голосов - 55, средняя оценка - 4.96
 Аватар для InzumaGlen
7 / 3 / 4
Регистрация: 08.02.2019
Сообщений: 26

Определите по сумме, сколько всего мячей было забито в матче (задача с олимпиады)

08.02.2019, 13:30. Показов 10699. Ответов 4

Студворк — интернет-сервис помощи студентам
Привет, я программист самоучка, недавно мой друг был на областной олимпиаде (9 класс), ну и он мне дал задачку оттуда, но я не могу её понять и решить, решить мне надо на языке C#. Помогите пожалуйста чтобы я её разобрал!Сделайте для консольной программы

Вместо того чтобы делать уроки, Вася смотрел футбольный матч и записывал счёт, который показывался на табло, после каждого забитого гола.
Например, у него могла получится такая запись: 1:0, 1:1, 1:2, 2:2, 2:3. После этого он сложил все записанные числа: 1+0+1+1+1+2+2+2+2+3= 15
По сумме, получившейся у Васи, определите, сколько всего мячей было забито в матче.
Входные данные. Одно целое неотрицательное число, не превосходящее 1000 - сумма, полученная Васей.
Выходные данные. Нужно вывести одно число - общее количество забитых мячей.
Примеры: Ввод: 15, Вывод: 5.

Удачи!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.02.2019, 13:30
Ответы с готовыми решениями:

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

Найти, из какой школы (школ) было больше всего участников олимпиады
Прошу помощи. Болел - ничего не понял. Скоро экзамен, а я ничего не понимаю в С++. Дали примерные задачи, а я не понимаю как решать. Вот...

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

4
70 / 44 / 28
Регистрация: 14.02.2017
Сообщений: 126
08.02.2019, 23:30
Лучший ответ Сообщение было отмечено InzumaGlen как решение

Решение

Добрый день!

Простым подбором закономерности.
1:0 - 1+0=1,
1:1 - 1+1=2,
1:2 - 1+2=3,
2:2 - 2+2=4,
2:3 - 2+3=5
Сумма голов каждой команды дает общее количество голов, которое и надо найти. Для простоты понимания - первая команда может не забить ни одного гола, а вторая забьет 5 голов:
0:1 - 0+1=1,
0:2 - 0+2=2,
0:3 - 0+3=3,
0:4 - 0+4=4,
0:5 - 0+5=5
1+2+3+4+5 = 15

Т.е. это ряд из натуральных чисел, при этом n-я сумма ряда является треугольным числом, т.е. в нашем случае n*(n + 1) / 2 = 15 и мы решаем квадратное уравнение n^2 + n - 30 = 0, D = 1^2 + 4*1*30 = 121, т.е. два корня. x1 = 5, x2 = -6. Соответственно 5 голов. Т.е. все сводится к решению квадратного уравнения, при этом дискриминант всегда будет >0 и уравнение будет иметь 2 корня - один искомый ответ, другой - отрицательный, но количество голов не может быть отрицательным.

Примитивно вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    class Program
    {
        public static void Goool(int n)//метод, который находит один из корней (нужный) нашего уравнения
        {
            int discriminant = 1 + 4 * 1 * n * 2;
            int res = Convert.ToInt32((-1 + Math.Sqrt(discriminant)) / 2);
            Console.WriteLine($"Забито голов: {res}");
        }
 
        static void Main(string[] args)
        {
            Goool(1000);
            Console.ReadKey();
        }
    }
1
1524 / 515 / 126
Регистрация: 09.01.2018
Сообщений: 1,614
09.02.2019, 02:30
Это арифметическая прогрессия с шагом 1, где последний член прогрессии и будет количеством забитых мячей.

C#
1
2
3
4
5
6
7
            while (progressionGoalsSum < srcGoalsSum)
            {
                goals++;
                progressionGoalsSum += goals;
            }
 
            Console.WriteLine(goals);
1
 Аватар для InzumaGlen
7 / 3 / 4
Регистрация: 08.02.2019
Сообщений: 26
09.02.2019, 10:25  [ТС]
Цитата Сообщение от lupanton Посмотреть сообщение
Примитивно вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    class Program
    {
        public static void Goool(int n)//метод, который находит один из корней (нужный) нашего уравнения
        {
            int discriminant = 1 + 4 * 1 * n * 2;
            int res = Convert.ToInt32((-1 + Math.Sqrt(discriminant)) / 2);
            Console.WriteLine($"Забито голов: {res}");
        }
 
        static void Main(string[] args)
        {
            Goool(1000);
            Console.ReadKey();
        }
    }
Добрый день lupanton, Я ввёл это в Microsoft Visual Studio 2019, в консольную программу с параметрами C#/Windows/Consol Programm. При запуске без отладки мне выдало "Забито голов: 44", хоть в примере и написано Ввод: 15, вывод: 5. Рушите баг, а пока, что пример не решённый!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    class Program
    {
        public static void Goool(int n)//метод, который находит один из корней (нужный) нашего уравнения
        {
            int discriminant = 1 + 4 * 1 * n * 2;
            int res = Convert.ToInt32((-1 + Math.Sqrt(discriminant)) / 2);
            Console.WriteLine($"Забито голов: {res}");
        }
 
        static void Main(string[] args)
        {
            Goool(1000);
            Console.ReadKey();
        }
    }
0
70 / 44 / 28
Регистрация: 14.02.2017
Сообщений: 126
09.02.2019, 11:52
Лучший ответ Сообщение было отмечено InzumaGlen как решение

Решение

В методе Main вместо
C#
1
Goool(1000);
введите
C#
1
Goool(15);
Ведь Вам надо вызвать метод с нужным аргументом.

Вернее нужно сделать вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
         public static void Goool(int n)//модифицированный метод
        {
            int discriminant = 1 + 4 * 1 * n * 2;
            double root = (-1 + Math.Sqrt(discriminant)) / 2;
            if (root % 1 == 0)//делаем проверку на целочисленность, ведь не может быть 1,5 гола)))
            {//ведь не каждое число от 0 до 1000 может получиться у Васи в результате сложения)))
              //возьмите, например сумму 7. Как ни крути - она у Васи не получится)))
              //1:0 (s = 1), 1:1 (s = 3), 2:1 (s = 6), 3:1 (s = 10)
                Console.WriteLine($"Cумма: {n}. Забито голов: {root}");
            }
            else
            {
                Console.WriteLine($"Как получилась такая сумма у Васи: {n}?");
            }
 
 
        }
 
        static void Main(string[] args)
        {            
            Goool(15);
            Console.ReadKey();
        }
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2019, 11:52
Помогаю со студенческими работами здесь

Сколько всего было подарено фотографий
2..Сколько всего было подарено фотографий, когда в конце совместного отдыха 5 человек решили оставить на память друг другу свои...

Определите, сколько слагаемых надо взять в сумме, чтобы получить m
Помогите пожалуйста решить задачку в Delfi: Определите, сколько слагаемых надо взять в сумме 1+2+3+..., чтобы получить m - значное...

Сколько всего яблок было в распоряжении дарившего?
Вике дали A-ую часть яблок, Насте – B-ую часть, Лизе – C-ую часть, Кате досталась D-ая часть Ксюша получила E Яблок. Сколько всего яблок...

Счетчик, запоминающий сколько было всего побед
Добрый день! Мой код - игра. Смысл игры это угадывать ячейки. Угадывать можно сколько угодно, то есть цикл есть(после победы снова...

Определите, сколько всего задач решил Вася
Перед турниром Вася провел подготовку. Он решил А задач на циклы, В задач на массивы и C задач на строки. Позже выяснилось, что из решенных...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru