Городская олимпиада по информатике 1987 г. - Ответы

Задача 1

ОТВЕТ . Совершенные числа.

Для каждого натурального числа I, начиная с 4, ищутся его делители в диапазоне [2, I/2], одновременно суммируются, и, если сумма равна исходному числу, то оно является ответом. Перебор можно несколько уменьшить, если рассмотреть интервал [2,sqr(I)].

10 REM СОВЕРШЕННЫЕ ЧИСЛА
20 INPUT N
30 FOR I=4 TO N
40 S=1
50 FOR J=2 TO I/2
60 IF I/J=INT(I/J) THEN S=S+J
70 NEXT J
80 IF S=I THEN PRINT S
90 NEXT I
100 END

К задачам

Задача 2

ОТВЕТ 2. Определение номера дня с начала года.

Возможны две реализации этой задачи: расчет по формуле либо последовательные вычисления с учетом числа високосных лет, подобно задаче 12, часть 2, ОСНОВЫ ИВТ(под ред. Ершова А.П.). р Предложенная программа реализует второй подход. Условие "високосности" года : G/4=int(G/4) и G/100 <> int(G/100) или G/400=int(G/400)

10 REM ДЕНЬ ГОДА
20 INPUT G,N,D
30 PRINT G;N;D
40 IF N*D=0 THEN PRINT"ОШИБКА В ИСХОДНЫХ ДАННЫХ":GOTO 20
50 DIM M(12)
60 R=D
70 IF N<2 THEN H=G-1:GOTO 180
80 IF N=2 THEN H=G-1:LET R=R+31:GOTO 180
90 H=G
100 FOR I=1 TO 12
110 M(I)=31
120 IF I=4 OR I=6 OR I=9 OR I=11 THEN M(I)=30
130 NEXT I
140 M(2)=28
150 FOR I=1 TO N-1
160 R=R+M(I)
170 NEXT I
180 IF H=-1 THEN 290
190 R=R+G*365
200 FOR I=0 TO H STEP 4
210 R=R+1
220 NEXT I
230 FOR I=100 TO H STEP 100
240 R=R-1
250 NEXT I
260 FOR I=400 TO H STEP 400
270 R=R+1
280 NEXT I
290 PRINT R
300 END

К задачам

Задача 3

ОТВЕТ 3. Квадраты.

Учитывая, что элементами являются числа {0,1,5,7}, можно использовать следующее соотношение: A(I,J)+A(I+1,J)+A(I,J+1)+A(I+1,J+1)=13 и далее следует проверить последовательно сумму всех таких "четверок", для I,J от 1 до N-1.

К задачам

Задача 4

ОТВЕТ 4.

Заметим, что данная последовательность состоит из чисел вида: x Рi А = 2 аn А* 3 аk А* 5 аp А. Таким образом, задача состоит в постороении упорядоченной последовательности x Рi А, а для этого необходимо организовать последовательное вычисление элементов с возможным возвратом к предыдущим, ранее вычисленным элементам для вставки их в последовательность на соответствующее по возрастанию место.

В программе приняты следующие обозначения: B(N)-последовательность построенных элементов;
К(3)-номера элементов(порождающих вершин);
L(3)-новые вершины.

10 INPUT "N=";N
20 DIM B(N),K(3),L(3)
30 S=1:B(S)=1
40 FOR I=1 TO 3:K(I)=1:NEXT I
50 Z=9.1E+62:PRINT B(S);
60 GOSUB 140:GOSUB 150:GOSUB 160
70 FOR I=1 TO 3:IF Z>L(I) THEN Z=L(I):NEXT I:REM MIN(из 3 вершин)
80 REM номер минимального элемента
90 FOR I=1 TO 3
100 IF L(I)=Z THEN K(I)=K(I)+1
110 NEXT I
120 S=S+1:IF S<=N THEN B(S)=Z:GOTO 60
130 END
140 L(1)=B(K(1))*2:RETURN
150 L(2)=B(K(2))*3:RETURN
160 L(3)=B(K(3))*5:RETURN

К задачам

Задача 5

ОТВЕТ 5.

Возможны следующие подходы к решению этой задачи. Во-первых, рассмотреть прямые, содержащие стороны треугольника. Если данная точка находится по ту же сторону от прямой, что и третья вершина, и это выполняется одновременно для всех трех прямых, то она расположена внутри треугольника. Во-вторых, если соединить эту точку с вершинами треугольника, рассмотреть сумму площадей вновь образованных трех треугольников, и эта сумма равна площади исходного треугольника (разумеется, в пределах заданной точности), то заданная точка находится внутри треугольника. В предложенной ниже программе реализовантретий подход, основанный на том, что если рассмотреть сумму углов при вершине, образованной исследуемой точкой и вершинами треугольника, и если эта сумма равна 360, то точка находится внутри треугольника.

10 REM ТРЕУГОЛЬНИК
20 DIM X(3),Y(3)
30 FOR I=1 TO 3
40 INPUT X(I),Y(I)
50 NEXT I
60 INPUT A,B
70 S=Y(1)-B
80 T=X(1)-A
90 GOSUB 400
100 P=F
110 S=Y(3)-B
120 T=X(3)-A
130 GOSUB 400
140 F=P-Q
150 IF ABS(F)>=3.141593 THEN F=F-3.141593*2*SGN(F)
160 Z=F
170 FOR I=1 TO 2
180 S=Y(I)-B
190 T=X(I)-A
200 GOSUB 400
210 P=F
220 S=Y(I+1)-B
230 T=X(I+1)-A
240 GOSUB 400
250 Q=F
260 D=P-Q
270 IF ABS(D)>=3.141593 THEN D=D-3.141593*2*SGN(D)
280 Z=Z+D
290 NEXT I
300 IF ABS(Z)<3.141593*2 THEN PRINT"ВНЕ"
310 IF ABS(Z)>=3.141593*2 THEN PRINT"ВНУТРИ"
320 END
400 IF S>0 AND T>0 THEN F=ATN(S/T)
410 IF S>0 AND T<0 THEN F=ATN(S/T)+3.141593
420 IF S<0 AND T>0 THEN F=ATN(S/T)+3.141593*2
430 IF S<0 AND T<0 THEN F=ATN(S/T)+3.141593
440 RETURN

К задачам

Задача 6

ОТВЕТ 6.

Задача сильно упростится, если мы не будем заранее исследовать, сколько соседних элементов есть у данной клетки. В этом случае программа будет иметь вид:

10 INPUT "ВВЕДИТЕ N КЛЕТКИ:";X
20 IF X<1 OR X>64 THEN PRINT "ОШИБКА":GOTO 10
30 IF X+8<=64 THEN PRINT X+8
40 IF X-8>=1 THEN PRINT X-8
50 IF (X-1)/8<>INT((X-1)/8) THEN PRINT X-1
60 IF X/8<>INT(X/8) THEN PRINT X+1

К задачам

© ярославский ?ентр телекоммуникаций и информационных систем в образовании, 2003.
Rambler's Top100