Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Олимпиады

Страница: 1 |

 

  Вопрос: ЕГЭ2006 Добавлено: 10.07.06 01:07  

Автор вопроса:  DaaGER | Web-сайт: smartic.ru | ICQ: 329195567 
Вот несколько заданий, которые я не понял как делать. Желательно, чтобы к ответам лежали пояснения!
Пусть знающие люди помогут:
==================
Определите, что делает следующая программа. Опишите в бланке ответа, что служит входными данными для программы. Что выводит программа в зависимости от входных данных?

Программа на языке Бейсик
DIM K,n,i,b,L,R, a(1000) AS INTEGER
INPUT K
INPUT n
FOR i = 1 TO n
INPUT a(i)
NEXT i
b = 1
FOR i = 2 TO n
IF a(i – 1) >= a(i) THEN b = 0
NEXT i
IF b = 0 THEN
 PRINT "данные некорректны"
 GOTO 10
END IF
L = 1: R = n
b = 0
WHILE (L <= R) AND (b = 0)
m = (L + R) \ 2
IF a(m) = K THEN b = 1 ELSE b = 0
IF a(m) < K THEN
  L = m + 1
 ELSE R = m – 1
END IF
WEND
IF b = 1 THEN PRINT m ELSE PRINT 0
10 END

C3

Опишите алгоритм поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов. Решение запишите в словесной форме или на алгоритмических языках Бейсик или Паскаль.

C4

Два игрока играют в следующую игру. Перед ними лежат три кучки камней, в первой из которых 2, во второй – 3, в третьей – 4 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или удваивает число камней в какой-то куче или добавляет по два камня в каждую из куч. Выигрывает игрок, после хода которого либо в одной из куч становится не менее 15 камней, либо общее число камней во всех трех кучах становится не менее 25. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.
 

C5

Во входном файле text.dat содержится текст на английском языке, заканчивающийся точкой (другие символы “.” в этом файле отсутствуют). Требуется написать программу на языке Паскаль или Бейсик, которая будет определять и выводить на экран английскую букву, встречающуюся в этом тексте чаще всего, и количество там таких букв. Строчные и прописные буквы при этом считаются не различимыми. Если искомых букв несколько, то программа должна выводить на экран первую из них по алфавиту. Например, пусть файл содержит следующую запись: It is not a simple task. Yes! Чаще всего здесь встречаются буквы I, S и T (слово Yes в подсчете не учитывается, так как расположено после точки). Следовательно, в данном случае программа должна вывести два символа, разделенных пробелом: I 3

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 Morpheus



Вопросов: 222
Ответов: 3767
 Web-сайт: xury.zx6.ru
 Профиль | | #1
Добавлено: 10.07.06 01:24
C3


Randomize
Dim a(1 To 30) As Long
Dim Max As Long
Dim MaxI As Long
Dim b As Long
Dim i As Long
For i = 1 To 30
    a(i) = Round(Rnd * 100) ' fill the array
Next i
Max = 0
MaxI = 0
For i = 1 To 28 ' first pack: 1,2 and 3; last pack: 28,29 and 30
    b = a(i) + a(i + 1) + a(i + 2)
    If b > Max Then
        Max = b
        MaxI = i
    End If
Next i
MsgBox "Max Sum:=" & Max & " at i=" & MaxI & ", " & MaxI + 1 & " and " & MaxI + 2

Ответить

Номер ответа: 2
Автор ответа:
 Morpheus



Вопросов: 222
Ответов: 3767
 Web-сайт: xury.zx6.ru
 Профиль | | #2
Добавлено: 10.07.06 01:42
-объявляем переменные
DIM K,n,i,b,L,R, a(1000) AS INTEGER

-читаем размер массва Н и переменную
КINPUT K
INPUT n

-читаем Н значений массива
FOR i = 1 TO n
INPUT a(i)
NEXT i

-проверяем, отсортирован ли массив по возростанию. если нет, то выход из проги
b = 1
FOR i = 2 TO n
IF a(i – 1) >= a(i) THEN b = 0
NEXT i
IF b = 0 THEN
 PRINT "данные некорректны"
 GOTO 10
END IF

-устанавливаем верхнюю и нижнюю границу чего-то
L = 1: R = n

-зануляем какой то флаг Б
b = 0

-пока границы нормальные и флаг занулён....
WHILE (L <= R) AND (b = 0)

-ищем центр (хм.. зачем?)
m = (L + R) \ 2

-если центральный элемент = К, то вроже всё
IF a(m) = K THEN b = 1 ELSE b = 0

-если типа центральный элемент меньше К то двигаем левую границу за него
IF a(m) < K THEN
  L = m + 1

-а если больше, то правую перед ним
 ELSE R = m – 1
END IF
WEND

ну и вывод только если мы нашли элемент равный К
IF b = 1 THEN PRINT m ELSE PRINT 0
10 END


Короче если я прально понял, то мы находим какой по счёту элемет = К
Ну и ******* код! почему бы просто не сделать перебор всех элементов чтобы узнать это??? хотя может просто так быстрее кто знает

Ответить

Номер ответа: 3
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #3
Добавлено: 10.07.06 17:02
Немножечко не так:
Если K равен любому элементу массива,прога выдаёт 0
В противном случае выводит номер ближайшего к нему элемента из a()
Цикл поиска элемента основан на том, что массив заранее отсортирован .
Нехороший код какой-то ... Запутанный. Можно было гораздо проще написать


===========
Задание 3:=
===========



Dim Arr(1 to 30)
Dim Max& 'максимальная сумма
Dim LastMax& 'Первый элемент в группе из 3х


LastMax=1
Max=0

For x=1 to 30 -2

temp=Arr(x) + Arr(x+1) + Arr(x+2)
if   temp > max   then   max = temp   :   LastMax = x

next x

'выйти,если ничё не нашлось
if max=0 then GoTo 101

'Не указано,чё требуется от программера: найти эту сумму или найти
' порядковый номер элемента,первого среди трёх,поэтому
' напечатаю и то ,и другое

'Max=максимальная сумма
'LastMax=первый элемент данной суммы

Print "Найдены элементы: " + lastmax + " - " + (lastmax + 2)
 print "Их сумма : " +  Max

101:
END



============
Задание 5:==
============


Для начала создадим массив для хранения кол-ва
встреченых букв
Symbols(1 to 128)
Например,если символ Ascii какой-то буквы =12
то к 12му элементу прибавится 1
Дальше пошёл код:


Dim Source$
Dim Symbols(1 to 128) as byte
Dim Temp& 'временная переменная для хранения ascii- кода символа

source$= "It's a very simple task. What do you think about?"



For x=1 to len(source$)
if mid(source,x,1)="." then exit for ' Если точка,перейти к этапу подсчёта кол-ва

Temp&= asc(Ucase(mid(source,x,1)))
if temp >128 then goto NextFor ' игнорировать неверный символ


'увеличиваем значение элемента в массиве
symbols(temp) = symbols(temp) +1


NextFor:
next x

'''''''''''
'Найдём,каких же букв больше
dim max& 'как и в прошлом примере,тот же смысл переменных
Dim LastMax&


'Чтобы найти первую по алфавиту из наиболее
'часто встречающихся
', зададим цикл в обратном порядке

max=0
lastmax=0

For x=128 to 1 step (-1)

if symbols(x) >= max then max = symbols(x) :  lastmax = x


next x

print Chr(x) + " " + max

END


Вроде так. Если чё не так,пиши
Задание №4 не стал смотреть

Ответить

Номер ответа: 4
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #4
Добавлено: 10.07.06 17:03
Немножечко не так:
Если K равен любому элементу массива,прога выдаёт 0
В противном случае выводит номер ближайшего к нему элемента из a()
Цикл поиска элемента основан на том, что массив заранее отсортирован .
Нехороший код какой-то ... Запутанный. Можно было гораздо проще написать


===========
Задание 3:=
===========



Dim Arr(1 to 30)
Dim Max& 'максимальная сумма
Dim LastMax& 'Первый элемент в группе из 3х


LastMax=1
Max=0

For x=1 to 30 -2

temp=Arr(x) + Arr(x+1) + Arr(x+2)
if   temp > max   then   max = temp   :   LastMax = x

next x

'выйти,если ничё не нашлось
if max=0 then GoTo 101

'Не указано,чё требуется от программера: найти эту сумму или найти
' порядковый номер элемента,первого среди трёх,поэтому
' напечатаю и то ,и другое

'Max=максимальная сумма
'LastMax=первый элемент данной суммы

Print "Найдены элементы: " + lastmax + " - " + (lastmax + 2)
 print "Их сумма : " +  Max

101:
END



============
Задание 5:==
============


Для начала создадим массив для хранения кол-ва
встреченых букв
Symbols(1 to 128)
Например,если символ Ascii какой-то буквы =12
то к 12му элементу прибавится 1
Дальше пошёл код:


Dim Source$
Dim Symbols(1 to 128) as byte
Dim Temp& 'временная переменная для хранения ascii- кода символа

source$= "It's a very simple task. What do you think about?"



For x=1 to len(source$)
if mid(source,x,1)="." then exit for ' Если точка,перейти к этапу подсчёта кол-ва

Temp&= asc(Ucase(mid(source,x,1)))
if temp >128 then goto NextFor ' игнорировать неверный символ


'увеличиваем значение элемента в массиве
symbols(temp) = symbols(temp) +1


NextFor:
next x

'''''''''''
'Найдём,каких же букв больше
dim max& 'как и в прошлом примере,тот же смысл переменных
Dim LastMax&


'Чтобы найти первую по алфавиту из наиболее
'часто встречающихся
', зададим цикл в обратном порядке

max=0
lastmax=0

For x=128 to 1 step (-1)

if symbols(x) >= max then max = symbols(x) :  lastmax = x


next x

print Chr(x) + " " + max

END


Вроде так. Если чё не так,пиши
Задание №4 не стал смотреть

Ответить

Номер ответа: 5
Автор ответа:
 Morpheus



Вопросов: 222
Ответов: 3767
 Web-сайт: xury.zx6.ru
 Профиль | | #5
Добавлено: 10.07.06 20:58
да, кстати, этот код чё ИЗ ЕГЭ ВЗЯТ? вчитайся внимательно! это тоже самое что дать текст со словом на букву Х на экзамене по русскому! (я имел ввиду и просто так нецензурное слово GoTo)

Ответить

Номер ответа: 6
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 235
Ответов: 8360
 Профиль | | #6 Добавлено: 10.07.06 21:08
2 DaaGER
с тебя Morpheus'у и Wamark'у пиво

2 Morpheus и Wamark
я в доле...

:)))))

Ответить

Номер ответа: 7
Автор ответа:
 Morpheus



Вопросов: 222
Ответов: 3767
 Web-сайт: xury.zx6.ru
 Профиль | | #7
Добавлено: 10.07.06 22:13

HACKER, боюсь в доле касательно пива то ты конечно будешь, но скорее в доле автора вопроса гыгы

Ответить

Номер ответа: 8
Автор ответа:
 Wamark



Вопросов: 2
Ответов: 22
 Web-сайт: kiev.ua
 Профиль | | #8
Добавлено: 11.07.06 10:16

До сих пор жалею, что ЕГЭ по информатике не сдавал..

Щас бы на нормальном факультете учился.. :))

Ответить

Номер ответа: 9
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 736
 Профиль | | #9 Добавлено: 17.07.06 02:21
Короче если я прально понял, то мы находим какой по счёту элемет = К
Ну и ******* код! почему бы просто не сделать перебор всех элементов чтобы узнать это??? хотя может просто так быстрее кто знает

Ага, этот алгоритм называется бинарным поиском. Работает на порядки быстрее перебора, но только с отсортированными данными.

Ответить

Номер ответа: 10
Автор ответа:
 Morpheus



Вопросов: 222
Ответов: 3767
 Web-сайт: xury.zx6.ru
 Профиль | | #10
Добавлено: 17.07.06 03:14
но только с отсортированными данными

ну ну... а не N^2 ли переборов ли надо сделать шоб отсортировать этот массиф? Даже если не пузырьком, всё равно будет долго

Ответить

Номер ответа: 11
Автор ответа:
 Morpheus



Вопросов: 222
Ответов: 3767
 Web-сайт: xury.zx6.ru
 Профиль | | #11
Добавлено: 17.07.06 03:19
ай, ну не N^2, но много. извиняюсь :)

Ответить

Номер ответа: 12
Автор ответа:
 shuffle



Администратор

ICQ: 201502381 

Вопросов: 15
Ответов: 736
 Профиль | | #12 Добавлено: 17.07.06 04:30
ну ну... а не N^2 ли переборов ли надо сделать шоб отсортировать этот массиф? Даже если не пузырьком, всё равно будет долго

Зависит от задачи - в данном случае данные изначально отсортированы.
Многие алгоритмы сортировки работают в стреднем за O(n*log n) операций. Поиск перебором O(n) операций, а бинпоиск O(log n).

Ответить

Страница: 1 |

Поиск по форуму





© Copyright 2002-2011 VBNet.RU | Пишите нам