Задания
Версия для печати и копирования в MS Word
Тип Д21 № 8109
i

На­пи­ши­те в от­ве­те число, рав­ное ко­ли­че­ству раз­лич­ных зна­че­ний вход­ной пе­ре­мен­ной k, при ко­то­рых при­ведённая ниже про­грам­ма вы­во­дит тот же ответ, что и при вход­ном зна­че­нии k = 10. Зна­че­ние k = 10 также вклю­ча­ет­ся в подсчёт раз­лич­ных зна­че­ний k. Для Ва­ше­го удоб­ства про­грам­ма при­ве­де­на на пяти язы­ках про­грам­ми­ро­ва­ния.

Бей­сикPython

DIM K, I AS LONG

INPUT K

I = 1

WHILE F(I) < K

    I = I + 1

WEND

IF F(I)-K <= K-F(I-1) THEN

    PRINT I

ELSE

    PRINT I-1

END IF

 

FUNCTION F(N)

    F = N * N * N

END FUNCTION

def f(n):

    return n*n*n

i = 1

k = int(input())

while f(i) < k:

    i+=1

if (f(i)-k <= k-f(i-1)):

    print (i)

else:

    print (i - 1)

Пас­кальАл­го­рит­ми­че­ский язык

var

    k, i : longint;

 

function f(n: longint) : longint;

begin

    f := n * n * n;

end;

begin

    readln(k);

    i := 1;

    while f(i) < k do

        i := i+1;

    if f(i)-k <= k-f(i-1) then

        writeln(i)

    else

        writeln(i-1);

end.

алг

нач

    цел i, k

    ввод k

    i := 1

    нц пока f(i) < k

        i := i + 1

    кц

    если f(i)-k <= k-f(i-1) то

        вывод i

    иначе

        вывод i-1

    все

кон

алг цел f(цел n)

нач

    знач := n * n * n

кон

Си++

#include <iostream>

using namespace std;

long f(long n) {

    return n * n * n;

}

 

int main()

{

    long k, i;

    cin >> k;

    i = 1;

    while (f(i) < k)

        i++;

    if (f(i)-k <= k-f(i-1)){

        cout << i << endl;

    } else {

        cout << i-1 << endl;

    }

}

Спрятать решение

Ре­ше­ние.

Для дан­но­го k нужно найти ми­ни­маль­ное i такое, что i в кубе боль­ше или равно k. После чего если 2 умно­жить на k боль­ше или равно i в кубе плюс левая круг­лая скоб­ка i минус 1 пра­вая круг­лая скоб­ка в кубе , то вы­ве­сти i, иначе i минус 1.

При k = 10 имеем i = 3. Также i = 3 при всех k при­над­ле­жит левая квад­рат­ная скоб­ка 9; 27 пра­вая квад­рат­ная скоб­ка .

В этом ин­тер­ва­ле k в пра­вой части не­ра­вен­ства все­гда будет 3 в кубе плюс 2 в кубе = 27 плюс 8 = 35.

То есть не­ра­вен­ство будет вы­пол­нять­ся при k боль­ше или равно 18. Нам же не нужно, чтобы оно вы­пол­ня­лось, так как при k = 10 оно не вы­пол­ня­ет­ся.

Итого при k при­над­ле­жит левая квад­рат­ная скоб­ка 9; 17 пра­вая квад­рат­ная скоб­ка не вы­пол­ня­ет­ся 2 умно­жить на k боль­ше или равно i в кубе плюс левая круг­лая скоб­ка i минус 1 пра­вая круг­лая скоб­ка в кубе и вывод все­гда один и тот же  — 2.

Боль­шие i не рас­смат­ри­ва­ем, по­то­му что нас ин­те­ре­су­ет вывод 2, а при i > 3 этого не может быть.

Рас­смот­рим же i = 2. Для этого зна­че­ния k при­над­ле­жит левая квад­рат­ная скоб­ка 2; 8 пра­вая квад­рат­ная скоб­ка .

В пра­вой части не­ра­вен­ства же стоит 2 в кубе плюс 1 в кубе = 9.

Нужно, чтобы новое не­ра­вен­ство вы­пол­ня­лось. Зна­чит, k боль­ше или равно 5.

Итого для i = 2 под­хо­дят k при­над­ле­жит левая квад­рат­ная скоб­ка 5; 8 пра­вая квад­рат­ная скоб­ка .

При мень­ших i вывод 2 также не­воз­мо­жен.

Итого имеем k при­над­ле­жит левая квад­рат­ная скоб­ка 5; 17 пра­вая квад­рат­ная скоб­ка   — всего 13 зна­че­ний.


Аналоги к заданию № 7678: 7467 7705 7766 ... Все

Источник: ЕГЭ 05.05.2015. До­сроч­ная волна