Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помощь с VB Добавлено: 01.02.09 09:51  

Автор вопроса:  planerolling
Привет у меня достаточно своеобразный вопрос)
Есть задача , которую в конечном итоге надо решить "графически" , но мне интересен код одного момента :
Имеется массив из N положительных чисел. Создайте алгоритм для вывода на дисплей всех троек чисел, которые могут быть длинами сторон одного треугольника.
Как выглядит код в VB этой фразы "для вывода на дисплей всех троек чисел" ?

Ответить

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

Номер ответа: 1
Автор ответа:
 Павел



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

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 01.02.09 10:28
Ммм.. Ну тут судя по всему нужно прость перебрать все сочетания 3 чисел из N и для каждого проверить условие (могут ли быть треугольником). В чем именно вопрос заключается?

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #2 Добавлено: 01.02.09 11:22
Встречный вопрос - требуется алгоритм вывода на дисплей или алгоритм поиска троек?

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #3 Добавлено: 01.02.09 11:34
Если второе, то наверно как то так -
  1. dim i1 as long,i2 as long,i3 as long
  2. for i1=lbound(a)to ubound(a)
  3. for i2=lbound(a)to ubound(a)
  4. for i3=lbound(a)to ubound(a)
  5.   if ((a(i1)+a(i2))>a(i3))and((a(i2)+a(i3))>a(i1))and((a(i3)+a(i1))>a(i2))then debud.print i1,a(i1),i2,a(i2),i3,a(i3)
  6. next i3
  7. next i2
  8. next i1

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #4 Добавлено: 01.02.09 11:59
А еще лучше так(замени 3 строчки), не будет повторений да и побыстрее сработает.
  1. for i1=lbound(a)to ubound(a)-2
  2. for i2=i1+1 to ubound(a)-1
  3. for i3=i2+1 to ubound(a)

Ответить

Номер ответа: 5
Автор ответа:
 VβÐ



Вопросов: 15
Ответов: 194
 Web-сайт: www.homacosoft.com
 Профиль | | #5
Добавлено: 01.02.09 12:32
беребор слижком долго будед роботадь, тут нужен алгоритм.

Ps^ это олимпиадная задача походу

Ответить

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


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 01.02.09 17:23
Сложность меньше N^3 невозможна, т.к. всегда можно подобрать ряд, в котором походить будут все тройки.

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #7 Добавлено: 01.02.09 19:48
Да не... сложность поменьше, где-то N*(N-1)*(N-2)/6 (по второму варианту)

Ответить

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



Вопросов: 4
Ответов: 6
 Профиль | | #8 Добавлено: 01.02.09 20:22
да требуется именно алгоритм для вывода на дисплей всех троек чисел..
 как он целиком выглядить?

Ответить

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



Вопросов: 4
Ответов: 6
 Профиль | | #9 Добавлено: 01.02.09 20:23
Нет это не олимпеадная задача

Ответить

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



Вопросов: 4
Ответов: 6
 Профиль | | #10 Добавлено: 01.02.09 20:35
а вот еще одна задача с вязанная с методом перебора:
Одна из разновидностей игры в кости состоит в том, что двое играющих поочередно бросают пару костей. Тот, кто набрал большее количество очков, выигрывает. В случае равенства очков победитель не выявляется. Сколько комбинаций имеют сумму, большую шести, сколько меньшую и сколько равную? Создайте алгоритм, который определяет вероятность выигрыша для любого допустимого количества очков.

Примечание. Вероятность можно определить как отношение количества выигрышных комбинаций к их общему количеству.

я ваще не могу понять ее, подскажите пожалуйста )

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #11 Добавлено: 01.02.09 20:48
Лень думать, может перед обработкой есть смысл отсортировать числа а дальше уже как-то перебирать по умному...

Ответить

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



Вопросов: 5
Ответов: 344
 Профиль | | #12 Добавлено: 01.02.09 20:59
вывода на дисплей
- а если "по-русски", в текстбокс, листбокс, (или еще куда)? Есть тут еще экстрасенсы кроме меня?

Ответить

Номер ответа: 13
Автор ответа:
 planerolling



Вопросов: 4
Ответов: 6
 Профиль | | #13 Добавлено: 01.02.09 21:10
в текстбокс

Ответить

Номер ответа: 14
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #14 Добавлено: 01.02.09 21:46
Made in Ёксель. Делай форму с одним текстбоксом
  1. Private Sub UserForm_Initialize()
  2. Dim a() As Long, N As Long, I As Long
  3. N = InputBox("Укажите размер массива:", "Пожалуйста!") 'проверку на валидность опускаю
  4. ReDim a(1 To N)
  5. Randomize
  6. For I = 1 To N
  7.   a(I) = Int(Rnd * N + 1)
  8. Next I
  9. Dim i1 As Long, i2 As Long, i3 As Long
  10. TextBox1.MultiLine = True
  11. For i1 = LBound(a) To UBound(a) - 2
  12.   For i2 = i1 + 1 To UBound(a) - 1
  13.     For i3 = i2 + 1 To UBound(a)
  14.       If ((a(i1) + a(i2)) > a(i3)) And ((a(i2) + a(i3)) > a(i1)) And ((a(i3) + a(i1)) > a(i2)) Then
  15.         TextBox1.Text = TextBox1.Text & a(i1) & " " & a(i2) & " " & a(i3) & vbCrLf
  16.       End If
  17.     Next i3
  18.   Next i2
  19. Next i1
  20. End Sub

Ответить

Номер ответа: 15
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #15
Добавлено: 01.02.09 22:47
Да не... сложность поменьше, где-то N*(N-1)*(N-2)/6 (по второму варианту)

Это и есть сложность O(N^3), а не поменьше.

Про кости:
  1. dim s(12)
  2. for i = 1 to 6
  3.  for j = 1 to 6
  4.   s(i + j) = s(i + j) + 1
  5.  next
  6. next
  7. t = 0
  8. for i = 2 to 12
  9.  ? "Вероятность выигрыша броска с "; i; " очками равна "; t / 36
  10.  t = t + s(i)
  11. next

Ответить

Страница: 1 |

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



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