Условие
Определить все возможные значения произведения [latex]i\cdot j[/latex], если целочисленные значения переменных [latex]i[/latex] и [latex]j[/latex] меняются соответственно [latex]i[/latex] от [latex]a[/latex] до [latex]b[/latex] и [latex]j[/latex] от [latex]c[/latex] до [latex]d[/latex] ([latex]1\leq a,b,c,d\leq 10[/latex]).
Входные данные
В одной строке заданы 4 числа [latex]a,b,c,d[/latex] ( [latex]a[/latex] может быть больше [latex]b[/latex], [latex]c[/latex] может быть больше [latex]d[/latex] ).
Выходные данные
Вывести количество возможных вариантов произведения.
Код
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 39 40 41 42 43 44 45 46 |
#include <iostream> using namespace std; int main() { int a,b,c,d; int p,pmin,pmax,j,imin,imax,jmin,jmax; int rez,flag; cin >>a>>b>>c>>d; if (a<b) { imin=a; imax=b; } else { imin=b; imax=a; } if (c<d) { jmin=c; jmax=d; } else { jmin=d; jmax=c; } pmin=imin*jmin; pmax=imax*jmax; rez=0; for (p=pmin; p<=pmax; p++) { flag=0; for (int i=imin; i<=imax;i++) { j=p/i; if ((p%i==0) && (j>=jmin) && (j<=jmax)) flag=1; } if (flag==1) rez=rez+1; } cout << rez; return 0; } |
Тестирование
№ | Входные данные | Выходные данные |
1 | 1 10 1 10 | 42 |
2 | 7 2 4 1 | 18 |
3 | 2 7 1 4 | 18 |
4 | 3 9 2 4 | 16 |
Решение
Для нахождения всех возможных результатов произведения без повторений [latex]i\cdot j[/latex] будем проверять каждое число [latex] p [/latex] (которое находится в диапазоне от произведения минимальных значений [latex] i [/latex] и [latex] j [/latex] до произведения их максимальных значений) на то, возможно ли его получить при помощи данного произведения. Если получить число хотя бы один раз, перемножив [latex] i [/latex] и [latex] j [/latex], реально,тогда значению [latex] flag [/latex] присваиваем 1. Если [latex] flag [/latex] присваивается 1, тогда [latex] rez [/latex] увеличивается на 1. В результате выводим итоговое [latex] rez [/latex].
Ссылки
- Условие задачи на E-Olymp;
- Код программы на Ideone.com;
- Подтверждение решения на E-Olymp.
— Во всех Ваших программах есть эта проблема. Посмотрите здесь какие могут быть варианты.
Если что-то переделаете, напишите об этом.
Кажется,наконец удалось полностью соблюсти определенный стиль отступов.Удалось ли устранить проблему с отступами в этой работе?
Нет, не удалось.
Очень простые правила. Видимо по моей ссылке было не очень понятно объяснено.
— если последующий оператор будет выполняться после окончания работы предыдущего, то их пишут один под другим.
— если последующий оператор входит в предыдущий, то последующий пишется с отступом относительно предыдущего.
Такая ситуация возникает в случаях когда в состав оператора входят другие операторы. Это характерно для условных операторов, циклов и некоторых других синтаксических конструкций.
В Вашем случае внутри одного оператора цикла выполняется другой оператор цикла:
Значит нужен сдвиг. Даже если Вы решили не ставить фигурных скобок для образования составного оператора.
— Признаться, я просто поменял бы местами значения переменных [latex]a[/latex] и [latex]b[/latex] если бы оказалось, что [latex]a[/latex] больше. Но Вы сделали гораздо лучше — завели отдельные переменные для начала и конца диапазона. Так понятнее читателю кода. Очень хорошо, молодец.
— Вы нарушили основное правило выбора имени переменной — использовали транслитерацию русских слов. Представьте себе, что авторы известных учебников по программированию использовали бы для именования транслитерацию слов своего родного языка. А ведь среди них есть поляки, румыны, индийцы по происхождению. Уверен, вы найдёте английские слова чтобы заменить konec и nachalo.
— Цикл по j является излишним. Если Вам известно произведение p и один из сомножителей i, то найти второй сомножитель j можно делением. Останется только проверить лежит ли он в требуемом диапазоне значений.
Изменила язык имен переменных на английский, избавилась от цикла по j, найдя сомножитель j делением. И поработала над отступами.
Молодец.
Поработайте ещё немного над отступами. Делайте отступы при помощи клавиши табуляции. И выберите какой-нибудь один стиль расстановки отступов и придерживайтесь его. Я в первом же комментарии дал ссылку на то какие бывают стили.
Игорь Евгеньевич, увидела расхождение в стиле, исправила это и отступы.
На ideone.com код вполне рабочий, а опубликованный код содержит много синтаксических ошибок. В чём причина?
Игорь Евгеньевич, по-видимому, во время копирования кода из ideone.com произошла ошибка и из-за этого появились синтаксические ошибки. Скопировала код заново.
Молодец, засчитано. Только уберите в 6-й строке описание переменной i, которая нигде в программе не используется. И напомните мне на занятиях рассказать про GNU-style отступы, которые Вы пытаетесь использовать.