воскресенье, 16 января 2011 г.

Условный оператор

Задача A. Максимум из двух чисел
Даны два целых числа, каждое число записано в отдельной строке. Выведите наибольшее из данных чисел.

  1.   int a,b;
  2.   cin>>a>>b;
  3.   if (a>b )
  4.     cout<<a;
  5.   else
  6.     cout<<b;
* This source code was highlighted with Source Code Highlighter.


Задача B. Високосный год
Требуется определить, является ли данный год високосным. (Напомним, что год является високосным, если его номер кратен 4, но не кратен 100, а также если он кратен 400.)

  1.   int y;
  2.   cin>>y;
  3.   if (y%4==0 && y%100!=0 || y%400==0)
  4.     cout<<"YES";
  5.   else
  6.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача C. Тестирующая система
В условии одной из задач на этом сайте написано: “Если данное четырехзначное число является симметричным, выведите 1, иначе выведите любое другое целое число”. Для проверки задачи используются заранее подготовленные примеры и правильные ответ на них. Школьнику кажется, что он решил эту задачу, но тестирующая система почему-то не принимает его решение. Школьник думает, что это происходит оттого, что он выводит не то любое другое число, которое записано в правильных ответах.
Напишите программу, которая по ответу, записанному в тестирующей системе и по ответу школьника определяет, верно ли школьник решила задачу. Программа получает на вход два числа: ответ, записанный в тестирующей системе и ответ школьника. Программа должна вывести YES, если школьник дала верный ответ и NO в противном случае.

  1.   int n1,n2;
  2.   cin>>n1>>n2;
  3.   if ((n1!=1 && n2!=1) || (n1==1 && n2==1))
  4.     cout<<"YES";
  5.   else
  6.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача D. Знак числа
В математике функция sign(x) (знак числа) определена так:
sign(x) = 1,   если x > 0,
sign(x) = -1, если x < 0,
sign(x) = 0,   если x = 0.
Для данного числа x выведите значение sign(x).

  1.   int n;
  2.   cin>>n;
  3.   if (n>0)cout<<1;
  4.   if (n<0)cout<<-1;
  5.   if (n==0)cout<<0;
* This source code was highlighted with Source Code Highlighter.


Задача E. Какое из чисел больше?
Даны два целых числа, каждое записано в отдельной строке. Программа должна вывести число 1, если первое число больше второго, число 2, если второе больше первого, или число 0, если они равны.

  1.   int n1,n2;
  2.   cin>>n1>>n2;
  3.   if (n1>n2 )cout<<1;
  4.   if (n2>n1 )cout<<2;
  5.   if (n1==n2 )cout<<0;
* This source code was highlighted with Source Code Highlighter.


Задача F. Максимум из трех
Даны три числа, каждое записано в отдельной строке. Выведите наибольшее из данных чисел (программа должна вывести ровно одно целое число).

  1.   int n1,n2,n3;
  2.   cin>>n1>>n2>>n3;
  3.   if (n1<n2)
  4.     n1=n2;
  5.   if (n1<n3)
  6.     n1=n3;
  7.   cout<<n1;
* This source code was highlighted with Source Code Highlighter.


Задача G. Ладья
Требуется определить, бьет ли ладья, стоящая на клетке с указанными координатами (номер строки и номер столбца), фигуру, стоящую на другой указанной клетке. Вводятся четыре числа: координаты ладьи (два числа) и координаты другой фигуры (два числа), каждое число вводится в отдельной строке.

  1.   int x1,y1,x2,y2;
  2.   cin>>x1>>y1>>x2>>y2;
  3.   if (x1==x2 || y1==y2)
  4.     cout<<"YES";
  5.   else
  6.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.

Задача не требует дополнительных условий, что шахматная доска не может быть больше 8х8, и фигуры не могут находиться в одной клетке.


Задача H. Слон
Требуется определить, бьет ли слон, стоящий на клетке с указанными координатами (номер строки и номер столбца), фигуру, стоящую на другой указанной клетке. Вводятся четыре числа: координаты слона и координаты другой фигуры.

  1.   int x1,y1,x2,y2;
  2.   cin>>x1>>y1>>x2>>y2;
  3.   int dx = x1 - x2;
  4.   int dy = y1 - y2;
  5.   if (dx < 0) dx = -dx;
  6.   if (dy < 0) dy = -dy;
  7.   if (dx == dy)
  8.     cout<<"YES";
  9.   else
  10.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.

Задача не требует дополнительных условий, что шахматная доска не может быть больше 8х8, и фигуры не могут находиться в одной клетке.


Задача I. Ферзь
Требуется определить, бьет ли ферзь, стоящий на клетке с указанными координатами (номер строки и номер столбца), фигуру, стоящую на другой указанной клетке. Вводятся четыре числа: координаты ферзя и координаты другой фигуры.

  1.   int x1,y1,x2,y2;
  2.   cin>>x1>>y1>>x2>>y2;
  3.   int dx=x1-x2;
  4.   int dy=y1-y2;
  5.   if (dx<0) dx=-dx;
  6.   if (dy<0) dy=-dy;
  7.  
  8.   if(x1==x2 || y1==y2 || dx==dy)
  9.     cout<<"YES";
  10.   else
  11.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.

Задача не требует дополнительных условий, что шахматная доска не может быть больше 8х8, и фигуры не могут находиться в одной клетке.


Задача J. Король
Поле шахматной доски определяется парой чисел (a, b), каждое от 1 до 8, первое число задает номер столбца, второе – номер строки. Заданы две клетки. Определите, может ли шахматный король попасть с первой клетки на вторую за один ход. 
Даны 4 целых числа от 1 до 8 каждое, первые два задают начальную клетку, вторые два задают конечную клетку. Начальная и конечная клетки не совпадают. Числа записаны в отдельных строках. Программа должна вывести YES, если из первой клетки ходом короля можно попасть во вторую, или NO в противном случае.

  1.   int x1,y1,x2,y2;
  2.   cin>>x1>>y1>>x2>>y2;
  3.   int dx = x1 - x2;
  4.   int dy = y1 - y2;
  5.   if (dx < 0) dx = -dx;
  6.   if (dy < 0) dy = -dy;
  7.  
  8.   if (dx + dy == 1)
  9.     cout<<"YES";
  10.   else
  11.     if (dx + dy == 2 && dx == 1 && dy == 1)
  12.       cout<<"YES";
  13.     else
  14.       cout<<"NO";
* This source code was highlighted with Source Code Highlighter.

Задача не требует дополнительных условий, что шахматная доска не может быть больше 8х8, и фигуры не могут находиться в одной клетке.


Задача K. Конь
Требуется определить, бьет ли конь, стоящий на клетке с указанными координатами (номер строки и номер столбца), фигуру, стоящую на другой указанной клетке. Вводятся четыре числа: координаты коня и координаты другой фигуры.

  1.   int x1,y1,x2,y2;
  2.   cin>>x1>>y1>>x2>>y2;
  3.   int dx = x1 - x2;
  4.   int dy = y1 - y2;
  5.   if (dx < 0) dx = -dx;
  6.   if (dy < 0) dy = -dy;
  7.   if ((dx+dy)==3 && dx!=0 && dy!=0)
  8.     cout<<"YES";
  9.   else
  10.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача L. Шоколадка
Требуется определить, можно ли от шоколадки размером n × m долек отломить k долек, если разрешается сделать один разлом по прямой между дольками (то есть разломить шоколадку на два прямоугольника). Вводятся 3 числа: n, m и k; k не равно n × m. Гарантируется, что количество долек в шоколадке не превосходит 30000.

  1.   int n,m,k;
  2.   cin>>n>>m>>k;
  3.   if (k<=m*n &&(k%n==0 || k%m==0))
  4.     cout<<"YES";
  5.   else
  6.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача M. Фишки
В каждую крайнюю клетку квадратной доски поставили по фишке. Могло ли оказаться, что выставлено ровно k фишек? (Например, если доска 2 x 2, то выставлено 4 фишки, а если 6 x 6 - то 20).
Вводится одно натуральное число k.

  1.   int k;
  2.   cin>>k;
  3.   if (k%4==0 || k==1)
  4.     cout<<"YES";
  5.   else
  6.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача N. Уравнение
Решить в целых числах уравнение ax + b = 0. Вводятся 2 числа: a и b. Необходимо вывести все решения, если их число конечно, “NO” (без кавычек), если решений нет, и “INF” (без кавычек), если решений бесконечно много.

  1.   int a,b;
  2.   cin>>a>>b;
  3.   if (a==0 && b==0)
  4.     cout<<"INF";
  5.   else
  6.     if ( a==0 || b%a!=0)
  7.       cout<<"NO";
  8.     else
  9.       cout<<-b/a;
* This source code was highlighted with Source Code Highlighter.


Задача O. Сложное уравнение
Решить в целых числах уравнение ( ax + b ) : ( cx + d ) = 0. Вводятся 4 числа: a, b, c и d; c и d не равны нулю одновременно. Необходимо вывести все решения, если их число конечно, “NO” (без кавычек), если решений нет, и “INF” (без кавычек), если решений бесконечно много.

  1.   int a,b,c,d;
  2.   cin>>a>>b>>c>>d;
  3.   if (a==0 && b==0)
  4.     cout<<"INF";
  5.   else
  6.     if ( a==0 || b%a!=0 || c*(-b/a)+d==0)
  7.       cout<<"NO";
  8.     else
  9.       cout<<-b/a;
* This source code was highlighted with Source Code Highlighter.


Задача P. Сдача
Товар стоит a руб. b коп. За него заплатили c руб. d коп. Сколько сдачи требуется получить? Вводятся 4 числа: a, b, c и d. Необходимо вывести 2 числа: e и f, число рублей и копеек, соответственно.

  1.   int r1,k1,r2,k2;
  2.   cin>>r1>>k1>>r2>>k2;
  3.  
  4.   int rRes = r2 - r1;
  5.   int kRes = k2 - k1;
  6.   if (kRes < 0)
  7.   {
  8.     kRes += 100;
  9.     rRes--; // rRes = rRes - 1;
  10.   }
  11.   cout<<rRes<<' '<<kRes;
* This source code was highlighted with Source Code Highlighter.


Задача Q. Мороженое
В кафе мороженое продают по три шарика и по пять шариков. Можно ли купить ровно k шариков мороженого?

  1.   int k;
  2.   cin>>k;
  3.   if (k!=1 && k!=2 && k!=4 && k!=7 )
  4.     cout<<"YES";
  5.   else
  6.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача R. Котлеты
На сковородку одновременно можно положить k котлет. Каждую котлету нужно с каждой стороны обжаривать m минут непрерывно. За какое наименьшее время удастся поджарить с обеих сторон n котлет? Вводятся 3 числа: k, m и n.

  1.   int res = 0;
  2.   if (n<k) {
  3.     res = 2 * m;
  4.   }
  5.   else {
  6.     res = 2 * n / k * m;
  7.     if (2 * n % k !=0)
  8.       res += m;
  9.   }
  10.   cout<<res;
* This source code was highlighted with Source Code Highlighter.


Задача S. Координатные четверти
Даны координаты двух точек на плоскости, требуется определить, лежат ли они в одной координатной четверти или нет (все координаты отличны от нуля). Вводятся 4 числа: координаты первой точки (x1, y1) и координаты второй точки (x2, y2).

  1.   int x1,y1,x2,y2;
  2.   cin>>x1>>y1>>x2>>y2;
  3.  
  4.   if (x1*x2>0 && y1*y2>0)
  5.     cout<<"YES";
  6.   else
  7.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача T. Существует ли треугольник?
Даны три натуральных числа a, b, c, записанные в отдельных строках. Определите, существует ли треугольник с такими сторонами. Если треугольник существует, выведите строку YES, иначе выведите строку NO.

  1.   int a,b,c;
  2.   cin>>a>>b>>c;
  3.  
  4.   if ( b + c > a && c + a > b && b + a > c)
  5.     cout<<"YES";
  6.   else
  7.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача U. Количество равных из трех
Даны три целых числа, записанных в отдельных строках. Определите, сколько среди них совпадающих. 
Программа должна вывести одно из чисел: 3 (если все совпадают), 2 (если два совпадают) или 0 (если все числа различны).

  1.   int a,b,c;
  2.   cin>>a>>b>>c;
  3.  
  4.   if (a == b && b == c)
  5.     cout<<3;
  6.   else
  7.     if (a == b || b == c || a == c)
  8.       cout<<2;
  9.     else
  10.       cout<<0;
* This source code was highlighted with Source Code Highlighter.


Задача V. Квадратное уравнение
Найдите все решения квадратного уравнения ax2 + bx + c = 0. 
Вводятся действительные числа a, b, c, a не равно 0. 
Выведите два действительных числа, если уравнение имеет два корня, одно действительное число – при наличии одного корня. При отсутствии действительных корней ничего выводить не нужно.

  1.   double a,b,c;
  2.   cin>>a>>b>>c;
  3.   double d,x1,x2;
  4.   d=b*b-4*a*c;
  5.   if (d>=0)
  6.   {
  7.     x1=(-b+sqrt(d))/(2*a);
  8.     printf("%0.8f\n",x1);
  9.     if (d>0)
  10.     {
  11.       x2=(-b-sqrt(d))/(2*a);
  12.       printf("%0.8f\n",x2);
  13.     }
  14.   }
* This source code was highlighted with Source Code Highlighter.


Задача W. Тип треугольника
Определите тип треугольника (остроугольный, тупоугольный, прямоугольный) с данными сторонами. Даны три натуральных числа – стороны треугольника.
Необходимо вывести одно из слов: rectangular для прямоугольного треугольника, acute для остроугольного треугольника, obtuse для тупоугольного треугольника или impossible, если входные числа не образуют треугольника.

  1.   int a,b,c;
  2.   cin>>a>>b>>c;
  3.  
  4.   if (a>b) swap(a,b);
  5.   if (b>c) swap(b,c);
  6.   if (a>b) swap(a,b);
  7.  
  8.   if ((b+c)>a && (c+a)>b && (b+a)>c)
  9.   {
  10.     if (c*c == a*a + b*b)
  11.       cout<<"rectangular";
  12.     else if (c*c < a*a + b*b)
  13.       cout<<"acute";
  14.     else
  15.       cout<<"obtuse";
  16.   }   
  17.   else
  18.     cout<<"impossible";
* This source code was highlighted with Source Code Highlighter.

Задача X. Коровы
По данному числу n закончите фразу "На лугу пасется..." одним из возможных продолжений: "n коров", "n корова", "n коровы", правильно склоняя слово "корова". 
Дано число n (n<100). Программа должна вывести введенное число n и одно из слов (на латинице): korov, korova или korovy, например, 1 korova, 2 korovy, 5 korov. Между числом и словом должен стоять ровно один пробел.

  1.   int n;
  2.   cin>>n;
  3.  
  4.   if ( n%10==0 || (n%10>=5 && n%10<=9)||(n>=11 && n<=14))
  5.     cout<<n<<" korov";
  6.   else
  7.     if(n%10==1)
  8.       cout<<n<<" korova";
  9.     else
  10.       cout<<n<<" korovy";
* This source code was highlighted with Source Code Highlighter.


Задача Y. Билеты на метро
Билет на одну поездку в метро стоит 15 рублей, билет на 10 поездок стоит 125 рублей, билет на 60 поездок стоит 440 рублей. Пассажир планирует совершить n поездок. Определите, сколько билетов каждого вида он должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость приобретенных билетов – минимальна. 
Дано одно число n - количество поездок. Выведите три целых числа, равные необходимому количеству билетов на 1, на 10, на 60 поездок.

  1.   const int cost1 = 15, cost10 = 125, cost60 = 440;
  2.   int n, k1, k10, k60;
  3.   cin >> n;
  4.   k60 = n / 60;
  5.   n %= 60;
  6.   k10 = n / 10;
  7.   k1 = n % 10;
  8.  
  9.   if (k1 * cost1 > cost10)
  10.   {
  11.     k1 = 0;
  12.     k10++;
  13.   }
  14.   if (k1 * cost1 + k10 * cost10 > cost60)
  15.   {
  16.     k1 = 0;
  17.     k10 = 0;
  18.     k60++;
  19.   }
  20.   cout<<k1<<" "<<k10<<" "<<k60;
* This source code was highlighted with Source Code Highlighter.


Задача Z. Билеты на метро – 2
Билет на одну поездку в метро стоит 15 рублей, билет на 5 поездок стоит 70 рублей, билет на 10 поездок стоит 125 рублей, билет на 20 поездок стоит 230 рублей, билет на 60 поездок стоит 440 рублей. Пассажир планирует совершить n поездок. Определите, сколько билетов каждого вида он должен приобрести, чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость приобретенных билетов – минимальна. 
Дано одно число n - количество поездок. Выведите пять целых чисел, равные необходимому количеству билетов на 1, на 5, на 10, на 20, на 60 поездок. Если для какого-то данного n существует несколько способов приобретения билетов одинаковой стоимости, необходимо вывести ту комбинацию билетов, которая дает большее число поездок.

  1.     const int cost1 = 15, cost5 = 70, cost10 = 125, cost20 = 230, cost60 = 440;
  2.   int n, k1, k5, k10, k20, k60;
  3.   cin >> n;
  4.   k60 = n / 60;
  5.   n %= 60;
  6.   k20 = n / 20;
  7.   n %= 20;
  8.   k10 = n / 10;
  9.   n %= 10;
  10.   k5 = n/5;
  11.   k1 = n % 5;
  12.  
  13.   if (k1 * cost1 >= cost5)
  14.   {
  15.     k1 = 0;
  16.     k5++;
  17.   }
  18.   if (k1 * cost1 + k5 * cost5 >= cost10)
  19.   {
  20.     k1 = 0;
  21.     k5 = 0;
  22.     k10++;
  23.   }
  24.   if (k1 * cost1 + k5 * cost5 + k10 * cost10 >= cost20)
  25.   {
  26.     k1 = 0;
  27.     k5 = 0;
  28.     k10 = 0;
  29.     k20++;
  30.   }
  31.   if (k1 * cost1 + k5 * cost5 + k10 * cost10 + k20 * cost20 >= cost60)
  32.   {
  33.     k1 = 0;
  34.     k5 = 0;
  35.     k10 = 0;
  36.     k20 = 0;
  37.     k60++;
  38.   }
  39.   cout<<k1<<" "<<k5<<" "<<k10<<" "<<k20<<" "<<k60;
* This source code was highlighted with Source Code Highlighter.

Задача AA. Координаты соседей
Для клетки с координатами (x, y) в таблице размером M × N выведите координаты ее соседей. Соседними называются клетки, имеющие общую сторону. 
Даны натуральные числа M, N, x, y (1 ≤ x ≤ M ≤ 109, 1 ≤ y ≤ N ≤ 109). В выходной файл выведите пары координат соседей этой клетки в произвольном порядке.

  1.   int m,n,x,y;
  2.   cin>>m>>n>>x>>y;
  3.  
  4.   if (x!=1) cout<<x-1<<" "<<y<<endl;
  5.   if (x!=m) cout<<x+1<<" "<<y<<endl;
  6.   if (y!=1) cout<<x<<" "<<y-1<<endl;
  7.   if (y!=n) cout<<x<<" "<<y+1;
* This source code was highlighted with Source Code Highlighter.


Задача AB. Апельсины бочками
Бизнесмен Василий после прочтения известной книги решил открыть новый бизнес – отгружать апельсины бочками. Партнерам важно знать сколько именно бочек апельсинов отгружается каждый день. Мобильный телефон Василия поддерживает только транслит, поэтому он передает сообщения вида "N bochek" . Например, "3 bochki" или "1 bochka" .
Напишите программу, которая выбирает правильное слово (из "bochka" , "bochek" , "bochki" ) в зависимости от N (0 ≤ N ≤ 1000).

  1.   int n;
  2.   cin>>n;
  3.   cout<<n<<" "<<"boch";
  4.  
  5.   if ( n%10==0 || (n%10>=5 && n%10<=9)||(n%100>=11 && n%100<=14))
  6.     cout<<"ek";
  7.   else
  8.     if(n%10==1)
  9.       cout<<"ka";
  10.     else
  11.       cout<<"ki";
* This source code was highlighted with Source Code Highlighter.


Задача AC. Четные и нечетные числа
Даны три целых числа A, B, C. Определить, есть ли среди них хотя бы одно четное и хотя бы одно нечетное. 
A, B, C не превышают по модулю 10000. Вывести – "YES" или "NO" .

  1.   int a,b,c;
  2.   cin>>a>>b>>c;
  3.  
  4.   a=abs(a);
  5.   b=abs(b);
  6.   c=abs(c);
  7.  
  8.   if ((a%2 != b%2)|| (a%2!= c%2) )
  9.     cout<<"YES";
  10.   else
  11.     cout<<"NO";
* This source code was highlighted with Source Code Highlighter.


Задача AD. Римская система счисления
Дано число X (1  ≤  X  ≤  100). Требуется перевести это число в римскую систему счисления.

  1.   int x;
  2.   cin>>x;
  3.   int x1,x10;
  4.   x1=x%10;
  5.   x10=x/10;
  6.  
  7.   if (x10==1) cout<<"X";
  8.   if (x10==2) cout<<"XX";
  9.   if (x10==3) cout<<"XXX";
  10.   if (x10==4) cout<<"XL";
  11.   if (x10==5) cout<<"L";
  12.   if (x10==6) cout<<"LX";
  13.   if (x10==7) cout<<"LXX";
  14.   if (x10==8) cout<<"LXXX";
  15.   if (x10==9) cout<<"XC";
  16.   if (x10==10) cout<<"C";
  17.  
  18.   if (x1==1) cout<<"I";
  19.   if (x1==2) cout<<"II";
  20.   if (x1==3) cout<<"III";
  21.   if (x1==4) cout<<"IV";
  22.   if (x1==5) cout<<"V";
  23.   if (x1==6) cout<<"VI";
  24.   if (x1==7) cout<<"VII";
  25.   if (x1==8) cout<<"VIII";
  26.   if (x1==9) cout<<"IX";
* This source code was highlighted with Source Code Highlighter.


Задача AE. Упорядочить три числа
Дано три числа, записанный в отдельных строках. Упорядочите их в порядке неубывания. Программа должна считывать три числа a, b, c, затем программа должна менять их значения так, чтобы стали выполнены условия a <= b <= c, затем программа выводит тройку a, b, c.

  1.   int a,b,c,t;
  2.   cin>>a>>b>>c;
  3.  
  4.   if (a>b) swap(a,b);
  5.   if (a>c) swap(a,c);
  6.   if (b>c) swap(b,c);
  7.  
  8.   cout<<a<<" "<<b<<" "<<c;
* This source code was highlighted with Source Code Highlighter.