Задача A. Задача из ЕГЭ Вася готовится к ЕГЭ по информатике и тренируется решать 23 задачу. Он нашел много вариантов этой задачи, но не нашел к ним ответов. Во всех найденных вариантах задачах формулируется
одинаково, отличаются только числа:
Исполнитель преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Умножить на k
Первая команда увеличивает число на экране на 1, вторая умножает его на k. Программа для
исполнителя это последовательность команд.
Сколько существует программ, для которых при исходном числе 1 результатом является число
p, и при этом траектория вычислений содержит число q?
Траектория вычислений программы это последовательность результатов выполнения всех команд программы. Например, для программы 121 при k = 3 траектория будет состоять из чисел 2,
6, 7.
Васе найти правильные ответы.
В первой строке входных данных записано число t количество различных вариантов задачи.
В следующих t строках записаны тройки чисел p, q, k. ответ для каждого варианта выведите в
отдельной строке.
В первом тесте t = 3. Оценка за этот тест: За каждую правильно подсчитанное число
программ начисляется Проверка осуществляется в режиме online (результат виден сразу).
Во втором тесте t = 70. Оценка за этот тест: За каждую правильно подсчитанное число
программ начисляется Во время тура проверяется, что сданный файл содержит 70 чисел.
Проверка правильности ответа осуществляется в режиме oine (результат виден после окончания
тура).
Примеры:
2
20 10 2
20 10 3
ответ на тест:
28
5
type
base = record
id: integer;
ball: integer;
end;
var
t: text;
a: array of array of integer;
n: integer;
st, tmp: string;
err: integer := 1;
database: base;
begin
readln(n);
setlength(a, n);
for i: integer := low(a) to high(a) do
setlength(a[i], 2);
for i: integer := low(a) to high(a) do
begin
readln(st);
tmp := st;
delete(tmp, pos(' ', tmp, err), tmp.Length - pos(' ', tmp, err) + 1);
database.id := strtoint(tmp);
tmp := st;
delete(tmp, 1, pos(' ', tmp, err));
database.ball := strtoint(tmp);
a[i, 0] := database.id;
a[i, 1] := database.ball;
end;
var j: integer := 0;
assign(t, 'output.txt');
rewrite(t);
while (j <= high(a)) do
begin
if (j + 1 < high(a)) and (a[j, 1] = a[j + 1, 1]) then
if (a[j, 0] < a[j + 1, 0]) then begin
write(t, inttostr(a[j, 0])); write(t, ' '); write(t, inttostr(a[j, 1])); writeln(t,'');
write(t, inttostr(a[j + 1, 0])); write(t, ' '); write(t, inttostr(a[j + 1, 1])); writeln(t,'');
end else begin
write(t, inttostr(a[j + 1, 0])); write(t, ' '); write(t, inttostr(a[j + 1, 1])); writeln(t,'');
write(t, inttostr(a[j, 0])); write(t, ' '); write(t, inttostr(a[j, 1])); writeln(t,'');
end;
if (j+1=n) then
write(t, inttostr(a[j, 0])); write(t, ' '); write(t, inttostr(a[j, 1])); writeln(t,'');
inc(j, 2);
end;
close(t);
end.
1,2,3,4,5,6,8
Объяснение:
Что напечатается:
1
3
5
6
2
4
6
8
4
6
8
При вызове F(1) печатается 1. Дальше вызовется F(3)
Напечатается 3. Вызовется F(5)
Напечатается 5. F(7) не вызывается, т.к. 7>5
Теперь вызывается вторая функция для F(3), то есть F(6)
Печатается 6. Дальше вызывается вторая функция для F(1), то есть F(2)
Печатается 2. Вызывается первая функция для F(2), т.е. F(4).
Печатается 4. Вызывается первая функция для F(4), т.е. F(6).
Печатается 6. Вызывается вторая функция для F(4), т.е. F(8)
Печатается 8. Вызывается вторая функция для F(2), т.е. F(4)
Печатается 4. Вызываются первая и вторая функции F(6) и F(8)
Печатается 6
Печатается 8