Хелпикс

Главная

Контакты

Случайная статья





Время проведения - 180 минут. Задача 1. НДС (20 баллов). Задача 2. Короткая последовательность (25 баллов)



 Время проведения - 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.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.