СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Решения некоторых олимпиадных задач по информатике муниципального уровня №1

Категория: Информатика

Нажмите, чтобы узнать подробности

Предлагаю Вашему вниманию решения некоторых олимпиадных задач муниципального уровня.

Просмотр содержимого документа
«Решения некоторых олимпиадных задач по информатике муниципального уровня №1»


1) Задача об изобретателе шахмат


N = Val(InputBox("Введите число клеток на одной стороне доски"))

V = N * N

S = 0

K = 1

For I = 1 To V

S = S + K

K = K * 2

Next I

Print S

End Sub


2) Найти разницу между наибольшей и наименьшей зарплатами трёх работников фирмы.


Dim P(1 To 3) As Integer

For I = 1 To 3

P(I) = Val(InputBox("Вводите размеры зарплат"))

Next I

Min = P(1)

Max = P(1)

For I = 2 To 3

If Min P(I) Then

Min = P(I)

Else

End If

Next I

For I = 2 To 3

If Max

Max = P(I)

Else

End If

Next I

R = Max - Min

Print R


3) На столе лежат N монеток. Некоторые из них лежат вверх номиналом, другие гербом. Определите число монеток, которые лежат вверх номиналом.


Формат входных данных

В компьютер сначала ввести число всех монеток N, затем ввести для каждой монеты 1, если монетка лежит вверх номиналом или 0, если монетка лежит вверх гербом.


Решение:


Dim A(), S As Integer

' Вводим число монет и задаём массив А() из стольких элементов

N=Val(InputBox(“Сколько всего монет”))

ReDim M(N)

Вводим номиналы

For I = 1 To N

A(I)= Val(InputBox(“Введите 1 или 0 ”))

Next I

' переменной S присваиваем значение 0

S=0

For I=1 To N

If A(I)=1 Then

‘ если элемент массива равен 1, к переменной S прибавляем 1

S=S+1

Next I

Print “Монет номиналом вверх”, S


4) Есть некоторый текст, состоящий из n маленьких латинских букв. Какое количество различных слов длины m можно из них составить?


Вводим два числа n и m (1mn


Программа выводит одно число – количество разных слов длины m, которые можно выделить из текста.

Например:

Ввод

Вывод

10 3

bbaabbbabb

6


Dim F() As String

A$ = InputBox("Введите текст")

C = Val(InputBox("Сколько всего букв в речи?"))

P = Val(InputBox("По сколько букв в словах?"))

L = C - P + 1

ReDim F(L)

Print A$

For I = 1 To L

F(I) = Mid(A$, I, P)

Print F(I)

Next I

S = L

For K = 1 To C - P

For N = K + 1 To L

If F(K) = F(N) And F(N) " " Then

F(N) = " "

S = S - 1

Else

End If

Next N

Next K

Print "Таких слов всего", S, "эти слова:"

For I = 1 To L

Print F(I)

Next I


5) По координатам n точек найти две самые близкие. Вводим сначала число точек, затем их координаты, например: если ввести 4; 3; 6; 2; 5, выйдет число 1.


Dim M() As Single: Dim A, B, M, N, Min, L, I, R As Integer

N = Val(InputBox("Сколько всего точек?"))

ReDim M(N)

For I = 1 To N

M(I) = Val(InputBox("Введите координаты точек"))

Next I

Min = (M(2) - M(1))

A = 1: B = 2

If Min

Min = -Min

Else

End If

For L = 1 To N - 1

For I = L + 1 To N

R = M(I) - M(L)

If R

R = -R

Else

End If

If R

Min = R

A = L: B = I

Else

End If

Next I

Next L

Print Min

End Sub



6) Программа «Фальшивая монета»


Из нескольких монет найти одну фальшивую. Определить, она легче или тяжелее остальных.


Решение:

Алгоритм:

В компьютер вводим массы монет.

Затем массу первой монеты сравниваем с массой второй. Если массы не равны, значит одна из них фальшивая. Массу первой монеты сравниваем с массой третьей. Если их массы равны, значит вторая фальшивая. Если массы не равны, то первая фальшивая.

Если массы первой и второй монет равны, то массу первой монеты сравниваем с массой третьей, четвёртой и т. д., если массы не равны, то очередная монета фальшивая.

Затем сравниваем массу фальшивой монеты с подлинной и делаем вывод, она легче или тяжелее остальных.

Программа:

Dim M() As Single

' Вводим, сколько всего монет

N = Val(InputBox("Сколько всего монет?"))

' Задаём линейный массив из этого числа элементов

ReDim M(N)

' Вводим массы монет, они будут элементами массива

For I = 1 To N

M(I) = Val(InputBox("Введите массы монет"))

Next I

' Сравним массы первой и второй монет

If M(1) = M(2) Then

' Если их массы равны, они обе подлинные

For I = 3 To N

' Сравниваем первую монету с третьей и т. д.

If M(1) M(I) Then

' Если массы не равны, значит, очередная монета фальшивая

Print "Номер фальшивой", I

If M(I) M(1) Then

Print "Фальшивая легче остальных"

Else

Print "Фальшивая тяжелее остальных"

End If

Else

End If

Next I

Else

' Если массы первой и второй монет не равны, одна из них фальшивая,

тогда сравниваем массы первой и третьей монет

If M(1) = M(3) Then

' Если их массы равны, то вторая монета фальшивая

Print "Номер фальшивой", 2

If M(2) M(1) Then

Print "Фальшивая легче остальных"

Else

Print "Фальшивая тяжелее остальных"

End If

Else

' Если массы первой и третьей монет не равны, то первая монета фальшивая

Print "Номер фальшивой", 1

If M(1) M(2) Then

Print "Фальшивая легче остальных"

Else

Print "Фальшивая тяжелее остальных"

End If

End If

End If


7) Пример программы на языке Паскаль:


Задача 4.


Program Falsh;

{Из нескольких монет одна фальшивая. Найти её номер.}

uses crt; {*для удобства ввода данных*}

const n=5; {*переменной n обозначаем количество монет*}


var i: integer;

Min, Max, Raz : real;


var m: array [1..n] of real;


begin

for I:=1 to n do

begin

writeln ('сколько составляет вес',i,'монеты');

read(m[i])

end;

if m[1]=m[2] then begin

for i:=3 to n do

begin

If m[1]m[i] then writeln ('номер фальшивой', i);

If m[i]фальшивая легче остальных');

If m[i]m[1] then writeln ('фальшивая тяжелее остальных')

end

end

else begin

if m[1]=m[3] then begin

writeln ('номер фальшивой 2');

if m[2]фальшивая легче остальных')

else writeln ('фальшивая тяжелее остальных');

end

else begin

writeln ('номер фальшивой 1');

if m[1]

else writeln ('фальшивая тяжелее остальных')

end

end


end.