воскресенье, 19 декабря 2010 г.

Ввод-вывод, оператор присваивания, арифметические операции


Задача A. Гипотенуза 
Дано два числа a и b. Выведите гипотенузу треугольника с заданными катетами.

  1. double a,b;
  2. cin>> a>>b;
  3. double c= sqrt(a*a+b*b);
  4. printf("%0.7f",c);
* This source code was highlighted with Source Code Highlighter.

Используем команду printf для задания большей точности дробного результата, т.к cout по умолчанию выдает лишь 5 цифр после запятой, что вызывает ошибку в WA #2.


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

Способ 1

  1. int a;
  2. cin>>a;
  3. cout<<"The next number for the number "<<a<< " is "<< a+1<<"." <<endl;
  4. cout<<"The previous number for the number "<< a<< " is "<< a-1<<"." <<endl;

* This source code was highlighted with Source Code Highlighter.

Способ 2

  1. int a;
  2. cin>>a;
  3. printf("The next number for the number %d is %d.\n",a,a+1);
  4. printf("The previous number for the number %d is %d.",a,a-1);

* This source code was highlighted with Source Code Highlighter.


Задача C. Дележ яблок – 1
N школьников делят K  яблок поровну, неделяющийся остаток остается в корзинке. Сколько яблок достанется каждому школьнику? Программа получает на вход числа
Nи K и должна вывести искомое количество яблок.

  1. int n,k;
  2. cin>>n>>k;
  3. cout<<k/n;

* This source code was highlighted with Source Code Highlighter.

 Задача D. Дележ яблок – 2
N школьников делят K яблок поровну, неделяющийся остаток остается в корзинке. Сколько яблок останется в корзинке? Программа получает на вход числа N и K и должна вывести искомое количество яблок.

  1. int n,k;
  2. cin>>n>>k;
  3. cout<<k%n;

* This source code was highlighted with Source Code Highlighter.

Задача E. МКАД
Длина Московской кольцевой автомобильной дороги —109 километров. Байкер Вася стартует с нулевого километра МКАД и едет со скоростью vкилометров в час. На какой отметке он остановится через t часов? Программа получает на вход значения v и t. Если v>0, то Вася движется в положительном направлении по МКАД, если же значение v<0, то в отрицательном.
Программа должна вывести целое число от 0 до 108 — номер отметки, на которой остановится Вася.

  1. int v,t,s;
  2. cin>>v>>t;
  3. s=v*t%109;
  4. cout<<(s+109)%109;

* This source code was highlighted with Source Code Highlighter.


Задача F. Последняя цифра 
Дано натуральное число. Выведите его последнюю цифру.

  1. int n;
  2. cin>>n;
  3. cout<<n%10;

* This source code was highlighted with Source Code Highlighter.


Задача G. Число десятков двузначного числа
Дано двузначное число. Найдите число десятков в нем.

  1. int n;
  2. cin>>n;
  3. cout<<n/10;

* This source code was highlighted with Source Code Highlighter.


Задача H. Число десятков
Дано натуральное число. Найдите число десятков в его десятичной записи (то есть вторую справа цифру его десятичной записи).

  1. int n;
  2. cin>>n;
  3. cout<<n/10%10;

* This source code was highlighted with Source Code Highlighter.


Задача I. Сумма цифр
Дано трехзначное число. Найдите сумму его цифр.

  1. int n;
  2. cin>>n;
  3. cout<<n%10+n/10%10+n/100%10;

* This source code was highlighted with Source Code Highlighter.


Задача J. Следующее четное
Дано целое число n. Выведите следующее за ним четное число. При решении этой задачи нельзя использовать условную инструкцию if и циклы.

  1. int n;
  2. cin>>n;
  3. cout<<n+2-n%2;

* This source code was highlighted with Source Code Highlighter.

Задача L. Электронные часы – 1
Дано число n. С начала суток прошло n минут. Определите, сколько часов и минут будут показывать электронные часы в этот момент. Программа должна вывести два числа: количество часов (от 0 до 23) и количество минут (от 0 до 59). Учтите, что число n может быть больше, чем количество минут в сутках.

  1. int n;
  2. cin>>n;
  3. cout<<n/60%24<<" "<<n%60;

* This source code was highlighted with Source Code Highlighter.


Задача M. Электронные часы – 2
Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов, потом обязательно двузначное количество минут, затем обязательно двузначное количество секунд. Количество минут и секунд при необходимости дополняются до двузначного числа нулями.
С начала суток прошло n секунд. Выведите, что покажут часы.

  1. int n,h,m,s;
  2. cin>>n;
  3. h=n/60/60%24;
  4. m=n/60%60;
  5. s=n%60;
  6. printf("%d:%0.2d:%0.2d",h,m,s);

* This source code was highlighted with Source Code Highlighter.

Т.к. по условию задачи формат вывода минут и секунд обязательно двухцифровой, а формат вывода часов не обозначен, то в printf для параметра h пропускаем формат 0.2, а для m и s устанавливаем.


Задача N. Обмен значений
Напишите программу, которая считывает значения двух переменных a и b, затем меняет их значения местами (то есть в переменной a должно быть записано то, что раньше хранилось в b, а в переменной b записано то, что раньше хранилось в a). Затем выведите значения переменных.

  1. int a,b,tmp;
  2. cin>>a>>b;
  3. tmp=a;
  4. a=b;
  5. b=tmp;
  6. cout<<a<<' '<<b;

* This source code was highlighted with Source Code Highlighter.


Задача O. Конец уроков
В некоторой школе занятия начинаются в 9:00. Продолжительность урока — 45 минут, после 1-го, 3-го, 5-го и т.д. уроков перемена 5 минут, а после 2-го, 4-го, 6-го и т.д. — 15 минут.
Дан номер урока (число от 1 до 10). Определите, когда заканчивается указанный урок. Выведите два целых числа: время окончания урока в часах и минутах. При решении этой задачи нельзя пользоваться циклами и условными инструкциями.

  1. int n,k;
  2. cin>>n;
  3. k=n*45+n/2*5+(n-1)/2*15;
  4. cout<<9+k/60<<' '<<k%60;

* This source code was highlighted with Source Code Highlighter.


Задача P. Стоимость покупки
Пирожок в столовой стоит a рублей и b копеек. Определите, сколько рублей и копеек нужно заплатить за n пирожков. Программа получает на вход три числа: a, b, n и должна вывести два числа: стоимость покупки в рублях и копейках.

  1. int a,b,n;
  2. cin>>a>>b>>n;
  3. a=a*n;
  4. b=b*n;
  5. cout<<a+b/100<<' '<<b%100;

* This source code was highlighted with Source Code Highlighter.

Задача Q. Разность времен
Даны значения двух моментов времени, принадлежащих одним и тем же суткам: часы, минуты и секунды для каждого из моментов времени. Известно, что второй момент времени наступил не раньше первого. Определите, сколько секунд прошло между двумя моментами времени. Программа на вход получает три целых числа — часы, минуты, секунды, задающие первый момент времени и три целых числа, задающих второй момент времени. Выведите число секунд между этими моментами времени.

  1. int h1,m1,s1,h2,m2,s2;
  2. cin>>h1>>m1>>s1>>h2>>m2>>s2;
  3. s1=h1*60*60+m1*60+s1;
  4. s2=h2*60*60+m2*60+s2;
  5. cout<<s2-s1;

* This source code was highlighted with Source Code Highlighter.

Задача R. Автопробег
За день машина проезжает n километров. Сколько дней нужно, чтобы проехать маршрут длиной m километров? Программа получает на вход числа n и m.
При решении этой задачи нельзя пользоваться условной инструкцией if и циклами.

1 способ

  1. int n,m;
  2. cin>>n>>m;
  3. cout<<m/n+(m%n+n-1)/n;

* This source code was highlighted with Source Code Highlighter.

Выражение (m%n+n-1)/n выведено искусственно с целью приведения автопробега в последний неполный день к 1 ( если m%n!=0) или к 0 (если m%n==0).

2 способ

  1. int n,m;
  2. cin>>n>>m;
  3. cout<<m/n+1%(m%n+1);
* This source code was highlighted with Source Code Highlighter.

В данном случае к значение m%n приведет к 1 выражение  1%(m%n+1).


Задача S. Дележ яблок – 3
n школьников делят k яблок “поровну”, то есть так, чтобы количество яблок, доставшихся любым двум школьникам, отличалось бы не более, чем на 1. Программа получает на вход числа n и k и должна вывести количество школьников, которым достанется яблок меньше, чем некоторым из их товарищей. При решении этой задачи нельзя пользоваться условной инструкцией if и циклами.

  1. int n,k;
  2. cin>>n>>k;
  3. cout<<(n-k%n)%n;

* This source code was highlighted with Source Code Highlighter.

Последнее деление %n приведет к нулю, если яблок досталось поровну.

 
Задача T. Улитка
Улитка ползёт по вертикальному шесту высотой h метров, поднимаясь за день на a метров, а за ночь спускаясь на b метров. На какой день улитка доползёт до вершины шеста? Программа получает на вход натуральные числа h, a, b и должна вывести одно натуральное число. Гарантируется, что a>b.
При решении этой задачи нельзя пользоваться условной инструкцией if и циклами.

  1. int h,a,b,shag,h0;
  2. cin>>h>>a>>b;
  3. h0=h-a;
  4. shag=a-b;
  5. cout<<1+h0/shag+(h0%shag+shag-1)/shag;

* This source code was highlighted with Source Code Highlighter.


Задача U. Симметричное число
Дано четырехзначное число. Определите, является ли его десятичная запись симметричной. Если число симметричное, то выведите 1, иначе выведите любое другое целое число. Число может иметь меньше четырех знаков, тогда нужно считать, что его десятичная запись дополняется слева незначащими нулями.
При решении этой задачи нельзя пользоваться условной инструкцией if и циклами

  1. int n;
  2. cin>>n;
  3. int ch1,ch2;
  4. ch1=n/100;
  5. ch2=n%100;
  6. ch2=ch2%10*10+ch2/10
  7. cout<<ch1-ch2+1;

* This source code was highlighted with Source Code Highlighter.


Задача V. Проверьте делимость
Даны два натуральных числа n и m. Если одно из них делится на другое нацело, выведите 1, иначе выведите любое другое целое число.
При решении этой задачи нельзя пользоваться условной инструкцией if и циклами.

  1. int n,m;
  2. cin>>n>>m;
  3. int a1,a2;
  4. a1=n%m;
  5. a2=m%n;
  6. cout<<a1*a2+1;

* This source code was highlighted with Source Code Highlighter.


Задача W. Максимум
Напишите программу, которая считывает два целых числа a и b и выводит наибольшее значение из них. Числа — целые от 1 до 1000.
При решении задачи можно пользоваться только целочисленными арифметическими операциями +, -, *, //, %, =. Нельзя пользоваться нелинейными конструкциями: ветвлениями, циклами, функциями вычисления модуля, извлечения квадратного корня.

Изучения языка программирования С++

Ввод-вывод, оператор присваивания, арифметические операции
Условный оператор
Операторы цикла
    Оператор For
        Вычисление сумм и произведений
        Задачи на цикл For
    Оператор While
        Задачи на цикл While
        Обработка последовательностей, индуктивные функции
        Анализ цифр числа
Типы данных 
    Целые числа
    Символы и строки
    Структуры
    Множества
    Действительные числа


Массивы
Функции и процедуры. Рекурсия.
STL

Первый пост

Начинаем решать.