ALTE DOCUMENTE
|
||||||||||
Особый интерес у студентов и школьников, увлекающихся информатикой, вызывают олимпиадные задачи - наиболее сложные задачи из курса информатики, с помощью к 22222n1324w 086;торых в форме соревнования выявляются наиболее талантливые и способные учащиеся.
Basic.
n 60%/(n -
Basic.
Среди N абитуриентов, сдававших экзамены по информатике, математике и языку, выбрать всех отличников и всех учащихся, набравших в сумме не меньше проходного балла. Данные о проходном балле вводятся с клавиатуры, а данные о результатах сдачи экзаменов представлены таблицей:
4 4
не меньше проходного:
<фам> <имя> <мат> <инф> <язык>
..............
проходной балл=? <b1>
<фам> <имя>
.....
<фам> <имя> <sum>
.......
cls
? «оценки учащихся:»
do
read fm$, nm$, mt, in, zk fm$, nm$, mt, in, zk
if fm$ then exit do fm$
? fm$, nm$, mt, in, zk (fm$, nm$, mt, in, zk)
loop
input «проходной балл=»,b1 запрос («проходной балл=»,b1)
restore ocenki ocenki
n
do
read fm$, nm$, mt, in, zk fm$, nm$, mt, in, zk
if fm$ = «» then exit do fm$ = «»
if mt=5 and in=5 and zk=5 then mt=5 in = 5 zk=5
? fm$, nm$ (fm$, nm$)
n = n + 1 n = n
end if
loop кцикл
if n=0 then ?
restore ocenki
n = 0
do
read fm$, nm$, mt, in, zk fm$, nm$, mt, in, zk
if fm$ = «» then exit do fm$ = «»
sum = mt + in + zk sum = mt + in + zk
if sum >= hi then sum >= bl
? fm$, nm$, sum (fm$, nm$, sum)
n = n + 1 n = n +
end if
loop кцикл
if n = 0 then ?
end
ocenki:
data
data
data
data «», «»,
задач. С этой задачей справилось большинство участников олимпиады. Однако далеко не все предусмотрели исключительные ситуации и в результате многие из них потеряли определенную часть баллов на указанных тестах.
<строка>
<строка'>
cls
line input st$ (st$)
st$ st$
In len(st$) in len(st$)
s$ st$ s$ st$
do
k instr(s$,«») k instr(s$,«»)
if k then k
s$ (s$)
exit do выход
end if кесли
lf$ left$(s$,k-l) lf$ left$(s$,k-l)
rt$ right(s$,ln-k) rt$ = right(s$,ln-k)
ns$ rt$ lf$ ns$ rt$ + «» + lf$
ns$ (ns$
if ns$ st$ then exit do при ns$ st$ выход
s$ ns$ s$ = ns$
loop кцикл
end кон
числу комбинаторных задач, решение которых заключается в организации перебора различных вариантов данных.
координаты точек:
<х1> <у1>
<х4> <у4>
<ml> <m2> <m3> <m4>
длина = <mх>
<n1> <n2> <n3> <n4>
<mn>
cls
n = 4
dim x(n),y(n),r(n,n) dim x(n),y(n),r(n,n)
? «координаты точек»
gosub vvdan
restore mrshrt
mr mr
mx
for l = 1 to mr l = 1 до mr
read k1, k2, k3, k4 k1, k2, k3, k4
dl r(kl,k2) r(k2,k3) dl r(kl,k2) r(k2,k3)
d3 r(k3,k4) r(k4,kl) d3 r(k3,k4) r(k4,k1)
d dl d3 d d1 + d3
kl; k2; k3; k4, d (k1; k2; k3; k4, d)
if mx then
mx = d: mn = d mx = d: mn = d
ml = kl: m2 = k2 ml = k1: m2 = k2
m3 = k3: m4 = k4 m3 = k3: m4 = k4
nl = kl: n2 = k2 n1 = k1: n2 = k2
n3 = k3: n4 = k4 n3 = k3: n4 = k4
elseif d > mx then инеc d > mx
mx = d mx = d
ml = kl: m2 = k2 m1 = k1: m2 = k2
m3 = k3: m4 = k4 m3= k3: m4 = k4
elseif d < mn then инеc d < mn
mn = d mn = d
nl = kl: n2 = k2 n1 = k1: n2 = k2
n3 = k3: n4 = k4 n3 = k3: n4 = k4
end if
next 1
? ml; m2; m3; m4 (m1; m2; m3; m4)
=»; mx =»; mx)
? nl; n2; n3; n4 (n1; n2; n3; n4)
=»; mn =»; mn)
end кон
vvdan:
restore tchks
for k = 1 to n k = 1
read x(k),y(k) x(k),y(k)
? x(k),y(k) x(k),y(k)
next k кцикл
for k = 1 to n k =
for l = 1 to n l = 1
dx = x(k) - x(l) dx = x(k) - x(l)
dy = y(k) - y(l) dy = y(k) - y(l)
rs = dx*dx + dy*dy rs = dx*dx + dy*dy
r(k,l) = sqr(rs) r(k,l) = sqr(rs)
next 1 кцикл
next k кцикл
return
mrshrt:
data
data
data
data
data
data
tchks: 'координаты точек
data
data
data
data
1 4 3 2 16
Tecт1.
точек: <n>
<k>: <x> <у>
....
<k> - <k+l>
отрезок: <1> <1+1>
точка: <х> <у>
...
Метод решения данной задачи может быть основан на вычислении точек пересечения отрезков (х1, у1) - (x2, у2) и (х3, y3) - (х4, y4) как точек пересечения линий, проходящих через заданные отрезки, с помощью системы уравнений:
(y2 - y1 x - x1) - (x2 - x1) (y
(у4 - у3) (x - x3) - (x - x3) (у - y3) =
D, Dx, Dy
(у2 - у1 - (х2 - х1 y1) х1 - (x2 - x1) y1;
(у4 - y3) = (у4 - у3) х3- (x4 - x3 y3,
Dx/D;
Dy/D;
D (х4 - x3) - (x2 - x1) (y4 - y3);
Dx y2 - yl) xl x1) y1 - (x4 - х3) - (x2 - x1) [(y4 - y3) x3 - (х4 - х3) y3
Dy х3 - (x4 - x3) y1) x1 x1) y1] (y4 - y3).
[(x1, y1
x1) (y3 (х4 - x1) - (х2 - x1) (y4 y1)
- (х2, у2)] и [(х3, у3) - (х4, у4)] на прямой. В данной ситуации взаиморасположение вершин отрезков можно выяснить, вычислив взаиморасположение между ними на прямой относительно отрезка [(х1, у1) - (х2, у2)] по следующим формулам:
d1
d2
d3 (x2
d4 = y1) (y2 -
d2 < min (d3, d4) или max (d3, d4) < 0, то отрезки не пересекаются. В противном случае необходимо выделить и отбросить две крайние точки, и тогда оставшиеся две точки зададут общую часть этих отрезков.
nt data
nt = 200
dim x(nt), y(nt)
gosub wod
np
for k = to nt
xl x(k): yl y(k)
x2 x(k I): y2 y(k
for k to nt
x3 x(I): y3 y(I)
x(I 1): y4 y(I
gosub pint
next
next k
if np then
end
pint:
d213 yl)*(x3
d214
d431
d432
if d213*d2l4 > or d431*d432 > 0 then
elseifd213*d214 < or d431*d432 < 0 then
gosub tchki
else
gosub lin 1
end if
return
tchki:
np np+1
k; k
I; I
D yl)*(x4
Dx
Dx = Dx -
Dy
Dy Dy yl)*xl
Dx/D
Dy/D
return
lin
d2
d3
d4 = xl)*(x2
if d3 > d2 and d4 > d2 then
Iseif d3 < 0 and d4 < 0 then
else
gosub otrеz
end if
return
otrez:
np = np + 1
if d3 < 0 or d4 < 0 then
elseif d3 < d4 then
else
end if
if d2 < d3 or d2 < d4 then
elseif d3 < d4 then
? x3; y3
else
end if
return
vvod: '
restore test1
read n
? «точек:»;nt
for k = 1 to nt
read x(k), y(k)
? x(k); y(k)
next kn
t = nt + 1
x(nt) = x(l)
y(nt) = y(l)
return
test1:
data 4
data
data 1,
data 0, 1
data 1, 1
test2:
data
data
data 1,
data
data
test1 или test2 в операторе перезагрузки restore
|