Нахождение кратчайшего сектора на окружности - VB
Формулировка задачи:
Есть окружность с 5-ю точками на ней.
Точки обозначены хаотично с одинаковым расстоянием друг от друга. К примеру (по часовой стрелке): A, C, E, B, D.
Задача определить кратчайший отрезок окружности от A к E, выбрав верное направление вращения.
Ответ: A-C-E (по часовой стрелке), т.к. сектор A-D-B-E (против часовой) длиннее.
Второй пример:
Найти кратчайший отрезок от точки A до точки D.
Ответ: A-D (против часовой стрелки), т.к. отрезок от A-C-E-B-D (по часовой) длиннее.
Может есть компактный алгоритм, а то не хочется городить огород со словарями и коллекциями.
Решение задачи: «Нахождение кратчайшего сектора на окружности»
textual
Листинг программы
CLS RANDOMIZE TIMER DIM x(4) AS STRING DIM y AS STRING DIM x1 AS STRING DIM x2 AS STRING x1 = "A" x2 = "D" FOR i = 0 TO 4 x(i) = CHR$(i + 65) NEXT FOR i = 0 TO 4 j = INT(5 * RND) y = x(i) x(i) = x(j) x(j) = y NEXT FOR i = 0 TO 4 PRINT x(i); NEXT PRINT FOR i = 0 TO 4 IF x(i) = x1 THEN i1 = i IF x(i) = x2 THEN i2 = i NEXT D = ABS(i1 - i2) SELECT CASE D CASE 1 IF i1 < i2 THEN PRINT "OTBET:"; x(i1); "-"; x(i2) ELSE PRINT "OTBET:"; x(i2); "-"; x(i1) END IF CASE 2 IF i1 < i2 THEN PRINT "OTBET:"; x(i1); "-"; x(i1 + 1); "-"; x(i2) ELSE PRINT "OTBET:"; x(i2); "-"; x(i2 + 1); "-"; x(i1) END IF CASE 3 IF i1 * i2 = 0 THEN PRINT "OTBET:"; x(0); "-"; x(4); "-"; x(3) ELSEIF i1 * i2 = 4 THEN PRINT "OTBET:"; x(4); "-"; x(0); "-"; x(1); END IF CASE 4 IF i1 < i2 THEN PRINT "OTBET:"; x(i1); "-"; x(i2) ELSE PRINT "OTBET:"; x(i2); "-"; x(i1) END IF END SELECT
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д