![]()
|
|||
Время проведения - 180 минут. Задача 1. НДС (20 баллов). Задача 2. Короткая последовательность (25 баллов)Стр 1 из 3Следующая ⇒ Время проведения - 180 минут Максимальное количество баллов- 100 Особенности проведения - задания практического тура выполняются на компьютерах и сохраняются в отведенные папки. Не допускается использование локальной сети и сети Интернет.
Задача 1. НДС (20 баллов) В чеке есть информация о количестве товара K (1≤K≤109) и его стоимость C (0.01≤C≤106), в которую уже включена надбавка НДС. Кроме этого указывается процент Р (целое число, 0≤P≤100) на добавленную стоимость (НДС). Вычислите, на какую сумму увеличена стоимость товара по отношению к закупочной цене и какова его закупочная цена. Например, при K=2 C=100.80 P=20(%) получим 8.40 сам НДС и 42.00 - закупочная цена S. Решение: Сначала находим, сколько стоит 1 экземпляр товара. Далее по формулам вычисляем: НДС=С*Р/(100+Р); S=C-НДС. Не забываем выводить с точностью 2 знака после запятой. Пример программы на Паскале: var k,P:longint; HDC,S,C:real; begin read(k,C,P); C:=C/k; HDC:=C*P/(100+P); S:=C-HDC; writeln(HDC:0:2); writeln(S:0:2); end.
Лучший вариант - работать с целыми числами: var k,P:longint; d,S,HDC:longint; C:real; begin read(k,C,P); d:=round(C*100); d:=d div k; HDC:=d*P div (100+P); S:=d-HDC; writeln(HDC/100:0:2); writeln(S/100:0:2); end.
Задача 2. Короткая последовательность (25 баллов) Дано целое число N. Рассмотрим последовательность S1S2S3...Sk..., где каждая группа цифр Sk состоит из записанных одно за другим чисел от 1 до k. Например, первые 75 цифр последовательности выглядят так: 112123123412345123456123456712345678123456789123456789101234567891011123456. Требуется написать программу, которая определит: какая цифра находится на N-ой (1≤N≤109) позиции в построенной последовательности.
Решение: Новый член последовательности формируется в потоке, который преобразуется в строку и добавляется к итоговой последовательности. Программа на С++ (частичное решение при небольших N): #include <iostream> #include <sstream> using namespace std; int main() { long n, c = 0; string S = ""; cin >> n;
stringstream p; while (S.length() <= n) { c++; p << c; S = S + p.str(); } cout << S[n-1]; return 0; }
Полное решение: Программа на Паскале var n, k, l, m : integer; begin read(n); l:=0; k:=0; while n>l+m do begin k:=k+1; if k<10 then m:=1 else if k<100 then m:=2 else m:=3; l:=l+m; n:=n-l end; if n<10 then write(n) else if n<190 then begin n:=n-10; l:=n div 2+10; if n mod 2=0 then write(l div 10) else write(l mod 10) end else begin n:=n-190; l:=n div 3+100; case n mod 3 of 0 : write(l div 100); 1 : write(l div 10 mod 10); 2 : write(l mod 10) end end end.
|
|||
|