Добавлен: 17.03.2024
Просмотров: 611
Скачиваний: 2
СОДЕРЖАНИЕ
учителя информатики КГУ «Гимназия №9» г.Караганды
Задача 1 (№ 1) A+B (Сложность: 1%)
Задача 3 (№ 903) Бисер (Сложность: 2%)
Задача 4 (№ 942) Олимпиада (Сложность: 2%)
Задача 5 (№ 195). Эния (Сложность: 3%)
Задача 7 (№ 33) Два бандита ( Сложность: 4%)
Задача 10 (№ 819) Прямоугольный параллелепипед
x=(h*(l+w)*2)/16; нужно учесть, что банка может быть неполной
Задача 14 (№ 780) Футбол (Сложность: 22%)
Выходные данные. В выходной файл OUTPUT.TXT выведите одно число – общее количество забитых мячей.
Задача 15 (№ 900) Три грибника (Сложность: 23%)
Задача 16 (№ 25) Больше-меньше (Сложность: 3%)
Задача 19 (№ 8)Арифметика (Сложность: 5%)
Задача 21 (№ 755) Сбор земляники (Сложность: 6%)
Задача 33 (№ 948) Сроки в книге (Сложность: 13%)
Задача 37 (№ 929) Игральные кубики (Сложность: 15%)
Задача 38 (№ 263) Метро (Сложность: 16%)
Задача 39 (№ 844) Поля (Сложность: 16%)
Задача 40 (№ 294) Болты и гайки (Сложность: 17%)
Выходные данные. В выходной файл выведите одно целое число – размер ущерба.
Задача 41 (№ 606)Треугольник – 3 (Сложность: 17%)
Задача 42 (№ 952) В автобусе (Сложность: 18%)
Задача 43 (№ 952) Кастинг (Сложность: 19%)
1, если в данном тесте требуется определить минимальное количество актеров;
Задача 45 (№ 68) Дом - Школа – Дом (Сложность: 21%)
Задача 49 (№ 692) Бинарные числа (Сложность: 8%)
Задача № 52 (№ 233). Автобусная экскурсия (Сложность: 14%)
Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.
Задача 55 (№ 264) Оттепель(Сложность: 17%)
Задача 56 (№ 949) Фибоначчиева последовательность. (Сл.17%)
Задача 57 (№ 778) Офис (Сложность: 18%)
Задача 60 (№ 947) Карточки – 3 (Сложность: 22%)
Задача 62 (№ 716) Треугольник Максима (Сложность: 25%)
Задача 63 (№ 272) Сумма max и мin (Сложность: 26%)
Задача 66 (№ 149). Разворот (Сложность: 9%)
Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.
Задача 69 (№ 637) NEERC (Сложность: 17%)
Задача 70 (№ 293) Налоги (Сложность: 20%)
Задача 74 (№ 324) Четырехзначный палиндром ( Сл.: 10%)
Задача 80 (№ 43) Нули (Сложность: 16%)
Задача 81 (№ 297) Кругляши (Сложность: 16%)
Задача 83 (№ 895) Крестики-нолики (Сложность: 19%)
Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.
Задача 87 (№ 633) ACM World Finals (Сложность: 20%)
Задача 89 (№ 315) Наименьшая система счисления (Сл.: 26%)
Выходные данные. В выходной файл OUTPUT.TXT выведите YES, если палатки указанным образом выбрать можно, и NO в противном случае.
#include
using namespace std;
int main () {
int k, w, a1, a2, a3, b1, b2, b3;
cin >> k >> w;
cin >> a1 >> b1 >> a2 >> b2 >> a3 >> b3;
Проверяем, можно ли использовать 2 палатки
if (a1+a2<=w & b1+b2>=k){cout << "YES"; return 0;}
if (a1+a3<=w & b1+b3>=k){cout << "YES"; return 0;}
if (a2+a3<=w & b2+b3>=k){cout << "YES"; return 0;}
Проверяем, можно ли использовать 3 палатки
if (a1+a2+a3<=w & b1+b2+b3 >= k){cout << "YES";
return 0; }
Проверяем, можно ли использовать 1 палатку
if (a1<=w & b1>=k) {cout << "YES";return 0;}
if (a2<=w & b2>=k) {cout << "YES"; return 0;}
if (a3<=w & b3>=k) {cout << "YES"; return 0;}
cout << "NO";
return 0; }
Задача 47 (№ 667) Автобусы – 2 (Сложность: 28%)
№ | INPUT.TXT | OUTPUT.TXT |
1 | 10 4 7 | 2 |
2 | 10 4 5 | 0 |
Входные данные
В единственной строке входного файла INPUT.TXT записано через пробел 3 натуральных числа - N, M и K, каждое из них не превосходит 10 000.
Выходные данные
В единственную строку выходного файла OUTPUT.TXT нужно вывести количество автобусов, которые нужно заказать. Если же отправить всех в лагерь невозможно, выведите 0 (ноль).
#include using namespace std; int main () { long d, w, a, ka; cin>> d >> w>>a; if (a<=2 and d>0) ka=0; else { ka=d/(a-2); if (d%(a-2)!=0) ka++; if (ka*2>w) ka=0; else {ka=(d+w)/a; if ((d+w)%a!=0) ka++;} } cout << ka; return 0; } | Поездка невозможна, если автобусы будут вмещать 1 или 2 чел. Находим, сколько автобусов нужно для детей (+1 автобус может быть не полный) Проверяем, есть ли у нас нужное число взрослых. Взрослых может быть больше, чем по 2 на каждый автобус, поэтому количество автобусов= Добавляем неполный автобус |
Циклические алгоритмы
Задача 48 (№ 106) Монетки (Сложность: 8%)
№ | INPUT | OUTPUT |
1 | 5 1 0 1 1 0 | 2 |
Входные данные. В первой строке входного файла INPUT.TXT записано натуральное число N (1 <= N <= 100) – число монеток. В каждой из последующих N строк содержится одно целое число – 1 если монетка лежит решкой вверх и 0 если вверх гербом.
Выходные данные. В выходной файл OUTPUT.TXT выведите минимальное количество монет, которые нужно перевернуть.
Считаем количество 0 и 1; выводим наименьшее из них
#include
using namespace std;
int main (){
int n,i,a0,b1,x;
cin>>n;
a0=0;
b1=0;
for (i = 1; i<=n; i++){
cin>>x;
if (x==0) (a0++);
if (x==1) (b1++);
}
if (a0>b1) cout<
return 0; }
Задача 49 (№ 692) Бинарные числа (Сложность: 8%)
Говорят, что плохой программист – это тот, кто считает, что в одном килобайте 1000 байт, а хороший программист – это тот, кто полагает, что в одном километре 1024 метра. Многим эта шутка понятна, так как все знают, что в процессах, связанных с информатикой и компьютерной техникой, фигурирует множество значений, выражаемых степенью двойки, то есть чисел вида 2K, где K – некоторое неотрицательное целое число. Назовем такие числа бинарными. Это такие числа как 2, 4, 8, 16, 32 и т.д. Действительно, когда речь идет о размере памяти или о разрешении экрана монитора, то мы часто наталкиваемся на бинарные числа. Все это связано с принципом хранения информации в памяти ЭВМ.
Задано целое число N. Требуется определить, является ли оно бинарным.
Входные данные. Входной файл INPUT.TXT содержит единственное целое число N, не превосходящее 10000 по абсолютной величине.
Выходные данные. В выходной файл OUTPUT.TXT выведите YES, если заданное число является бинарным, и NO в противном случае.
№ | INPUT.TXT | OUTPUT |
1 | 1024 | YES |
2 | 23 | NO |
#include
using namespace std;
int main (){
int a;
cin>>a;
while (a%2==0 && a>1){a=a/2;}
if (a==1) cout<<"YES"; else cout<<"NO";
return 0; }
Задача 50 (№ 35) Конечные автоматы ( Сложность: 11%)
№ | INPUT.TXT | OUTPUT |
1 | 4 2 0 13 20 5 23 18 6 | 44344 48134 45699 49458 |
1 | 2 15 20 1000 26000 | 48767 1340237 |
Входные данные. Первая строка входного файла INPUT.TXT содержит целое число k (1 ≤ k ≤ 10000) – количество конечных автоматов. Следующие k строк содержат по два целых числа ni (0 ≤ ni ≤ 1000) и mi (0 ≤ mi ≤ 26ni2) – число состояний и переходов i-го автомата.
Выходные данные. Выходной файл OUTPUT.TXT должен состоять из k строк. На i-й строке выходного файла выведите одно число – нетривиальность i-го автомата.
#include
using namespace std;
int main(){
long long int k,m,n;
int d;
cin>>k;
for(int i=0;i
cin>>n>>m;
d= 19*m + (n + 239)*(n + 366) / 2;
cout<
return 0; }
Задача 51 (№ 81) Арбузы (Сложность: 14%)
Иван Васильевич пришел на рынок и решил купить 2 арбуза: один для себя, а другой для тещи. Понятно, что для себя нужно выбрать арбуз потяжелей, а для тещи полегче. Но вот незадача: арбузов слишком много и он не знает, как же выбрать самый легкий и самый тяжелый арбуз? Помогите ему!
Входные данные
В первой строке входного файла задано одно число N – количество арбузов. Вторая строка содержит N чисел, записанных через пробел. Здесь каждое число – это масса соответствующего арбуза. Все числа натуральные и не превышают 30000.
Выходные данные
В выходной файл нужно вывести два числа через пробел: массу арбуза, который Иван Васильевич купит теще и массу арбуза, который он купит себе.
# include
№ | INPUT | OUTPUT |
1 | 5 5 1 6 5 9 | 1 9 |
using namespace std;
int main () {
int n, max, i, min, ves;
cin>>n;
max=0; min=30001;
for (i = 1; i <=n; i++){
cin>>ves;
if (ves>max) (max=ves);
if (ves
cout<
return 0; }
Задача № 52 (№ 233). Автобусная экскурсия (Сложность: 14%)
Оргкомитет Московской городской олимпиады решил организовать экскурсию по Москве для участников олимпиады. Для этого был заказан двухэтажный автобус высотой 437 см. На экскурсионном маршруте встречается N мостов. Оргкомитет олимпиады очень обеспокоен тем, что высокий двухэтажный автобус может не проехать под одним из них. Им удалось выяснить точную высоту каждого из мостов. Автобус может проехать под мостом тогда и только тогда, когда высота моста превосходит высоту автобуса. Помогите организаторам узнать, можно ли провести эту экскурсию, а если нет, установите, под каким мостом автобус не сможет проехать.
Формат входных данных. Первая строка содержит число N (1≤ N≤1000). Далее идут N натуральных чисел, не превосходящих 1000, - высоты мостов в сантиметрах в том порядке, в котором они встречаются на пути автобуса.
№ | INPUT.TXT | OUTPUT |
1 | 1 763 | No crash |
2 | 3 763 245 113 | Crash 2 |
3 | 1 437 | Crash 1 |
#include
using namespace std;
int main (){
int k,n,i,b,f;
cin>>n;
f=0;
for (i = 1; i<=n; i++){
Считаем количество мостов k, под которыми проедет автобус.
cin>>b;
if (b>437) f++;
else {
cout<<"Crash "<
}
if (f==n) cout<<"No crash";
return 0; }
Задача 53 (№ 131) Перепись (Сложность: 15%)
В доме живет N жильцов. Однажды решили провести перепись всех жильцов данного дома и составили список, в котором указали возраст и пол каждого жильца. Требуется найти номер самого старшего жителя мужского пола.
Входные данные
Во входном файле INPUT.TXT в первой строке задано натуральное число N – количество жильцов (N<=100). В последующих N строках располагается информация о всех жильцах: каждая строка содержит два целых числа: V и S – возраст и пол человека (1<=V<=100, S – 0 или 1). Мужскому полу соответствует значение S=1, а женскому – S=0.
№ | INPUT.TXT | OUTPUT.TXT |
1 | 4 25 1 70 1 100 0 3 1 | 2 |
Выходной файл OUTPUT.TXT должен содержать номер самого старшего мужчины в списке. Если таких жильцов несколько, то следует вывести наименьший номер. Если жильцов мужского пола нет, то выведите -1.
#include
#include
using namespace std;
int main (){
int n,v,s,i,c,max;
cin>>n;
max=0;
for (i = 1; i<=n; i++){
cin>>v>>s;
if (s==1 && v>max) (max=v, c=i); }
if (max==0) cout<<-1; else cout<
return 0; }
Задача 54 (№ 818) Кипячение чая (Сложность: 14%)
В эту субботу у Васи день рождения и через 15 минут к нему придут гости. Ему срочно надо вскипятить чай, для того чтобы напоить им гостей. У Васи дома есть много литровых чайников (можно считать, что их бесконечное количество), а розетка всего одна. Т.к. вода кипятится очень долго, за 15 минут она успеет вскипятиться максимум один раз. Но Вася – мальчик не промах, он достал из кладовки N тройников, в i-том тройнике ai разъемов. Теперь Вася ломает голову: как ему соединить тройники и воткнуть эту систему в розетку, чтобы максимизировать количество чайников, которые он сможет поставить кипятить.
№ | INPUT.TXT | OUTPUT.TXT |
1 | 1 1 | 1 |
2 | 3 2 5 4 | 9 |
Входные данные. В первой строке входного файла INPUT.TXT содержится число N (1 ≤ N ≤ 105) – количество тройников. Во второй строке через пробел перечислены числа ai (1 ≤ ai ≤ 1000, 1 ≤ i ≤ N) – информация о тройниках.
Выходные данные. В выходной файл OUTPUT.TXT выведите ответ на задачу.
#include using namespace std; int main() { int n,c,f; f=0; cin>>n; for(int i=0;i cin>>c; f+=c-1; } cout< return 0; } | Складываем количество разъемов -1 (у каждого тройника один разъем уходит на подключение другого тройника) В последнем тройнике используются все разъемы (+1) |
Задача 55 (№ 264) Оттепель(Сложность: 17%)
№ | INPUT.TXT | OUTPUT |
1 | 6 -20 30 -40 50 10 -10 | 2 |
2 | 8 10 20 30 1 -10 1 2 3 | 4 |
3 | 5 -10 0 -10 0 -10 | 0 |
Оттепелью они называют период, в который среднесуточная температура ежедневно превышала 0 градусов Цельсия. Напишите программу, помогающую синоптикам в работе.
Входные данные. Во входном файле сначала записано число N – общее количество рассматриваемых дней (1 ≤ N ≤ 100). В следующей строке через пробел располагается N целых чисел, разделенных пробелами. Каждое число – среднесуточная температура в соответствующий день. Температуры – целые числа и лежат в диапазоне от –50 до 50.
Выходные данные. В выходной файл требуется вывести одно число – длину самой продолжительной оттепели, то есть наибольшее количество последовательных дней, на протяжении которых среднесуточная температура превышала 0 градусов. Если температура в каждый из дней была неположительной, выведите 0.
#include using namespace std; int main() { int n, t, kol = 0,max=0; cin >> n; for (int i = 0; i < n; i++) { cin >> t; if (t>0) { kol++; if (kol > max) max = kol; } else kol = 0; } cout << max; return 0; } | Считаем количество kol положительных чисел и сравниваем это количество с мах. Если встречается отрицательное число, то kol=0 |
Задача 56 (№ 949) Фибоначчиева последовательность. (Сл.17%)
Последовательность чисел a1, a2, …, ai,… называется Фибоначчиевой, если для всех i ≥ 3 верно, что ai=ai-1+ai-2, то есть каждый член последовательности (начиная с третьего) равен сумме двух предыдущих.
Ясно, что, задавая различные числа a1 и a2, мы можем получать различные такие последовательности, и любая Фибоначчиева последовательность однозначно задается двумя своими первыми членами.
Будем решать обратную задачу. Вам будет дано число n и два члена последовательности: an и an+1. Вам нужно написать программу, которая по их значениям найдет a1 и a2.
Входные данные. Входной файл содержит число n и значения двух членов последовательности: an и an+1 (1 ≤ n ≤ 30, члены последовательности — целые числа, по модулю не превышающие 2×109).
Выходные данные. В выходной файл OUTPUT.TXT выведите два числа — значения первого и второго членов этой последовательности.
№ | INPUT.TXT | OUTPUT.TXT |
1 | 4 3 5 | 1 1 |
using namespace std;
int main() {
int n,a,b,x;
cin>>n>>a>>b;
Отнимаем от последнего числа (b) предыдущее число (a). Чтобы не использовать массив записываем в а разность (a=b-a) , а в b-предыдущее число.
for(int i=0;i
x=a;
a=b-a;
b=x; }
cout<
return 0; }