Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / И еще одна задача / 5 сообщений из 5, страница 1 из 1
20.01.2005, 16:26:56
    #32875312
Лёшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще одна задача
Точнее не задача, а проблема в ней
Есть N (300<N<100) натуральных чисел Аi (i=1…N, Ai<2005, все Ai различны). Надо найти длину (количество элементов) самой длиной арифметической прогрессии, которую можно сформировать, используя некоторые из чисел Ai

Ввод: Целое N и N строк, в которых записаны N чисел Ai
Вывод: Целое число, равное длине самой длиной арифметической прогрессии.
Пример: (в ( ) комментарий относительно того что вводится в строке)
5 (N)
10 (A1)
4 (A2)
5(A3)
15(A4)
2(A5)
3
Тут я насколько понимаю массив. Но как его задать, и из него считать, а самое главное в него ввести. В qbasic я знаю как массив задать и использовать Input, а как тут? Буду очень признателен.
...
Рейтинг: 0 / 0
23.01.2005, 07:37:09
    #32878798
Мужик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще одна задача
ничего не понял, если количество Ai максимально до N, то длина арифметической прогрессии будет N

обьявлять одномерный массив просто Dim A(ко-во элементов) или если не знаешь ко-во то просто Dim()
двумерные массивы (матрицы) обьявлять Dim A(5,5) as integer

и вводится просто A(3)=44 или A(4)="Присвоена строка"
можно ввести так

for i =1 to N then
a(i)=round(rnd*2005-1)
next i

тогда элементы Ai будут все заполнены случайнами числами от 0 до 2004
...
Рейтинг: 0 / 0
23.01.2005, 14:24:59
    #32878895
Андрей Il
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще одна задача
Попробуй этот код. Я пробовал несколько комбинаций цифр - все работает. Проверь на своих данных.

Private N, Mas(2005), B(2005), C(2005), i, j, k, l, m, o As Long
Private Sub Run_Click()
N = Val(InputBox("Введите N"))
For i = 1 To N
Mas(i) = Val(InputBox("Введите Mas(" & i & ")"))
Next i
For i = 1 To N - 1
For j = i + 1 To N
If Mas(j) < Mas(i) Then
k = Mas(i)
Mas(i) = Mas(j)
Mas(j) = k
End If
Next j
Next i
k = 0
For i = 1 To N - 1
For j = i + 1 To N
k = k + 1
B(k) = Mas(j) - Mas(i)
Next j
Next i
l = 1
C(1) = B(1)
For i = 2 To k - 1
x = 0
For j = 1 To l
If C(j) = B(i) Then x = x + 1
Next j
If x = 0 Then
l = l + 1
C(l) = B(i)
End If
Next i
o = 0
For i = 1 To N - 1
For j = 0 To l
m = Mas(i) + j
x = 1
For k = i + 1 To N
If Mas(k) = m Then
x = x + 1
m = m + j
End If
Next k
o = o + 1
B(o) = (x)
C(o) = j
Next j
Next i
k = B(1)
For i = 2 To o
If B(i) > k Then k = B(i)
Next i
MsgBox "Длина самой длинной арифметической прогрессии равна " & k
End Sub
...
Рейтинг: 0 / 0
24.01.2005, 09:24:20
    #32879239
Андрей Il
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще одна задача
Данное решение верно при N>2.
Если N равно 1 или 2, то длина прогрессии равна N.
Поэтому можно после строки:
N = Val(InputBox("Введите N"))
ввести:
If N < 3 Then
MsgBox "Длина самой длинной арифметической прогрессии равна " & N
Exit Sub
End If
...
Рейтинг: 0 / 0
24.01.2005, 17:34:24
    #32880822
Лёшик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
И еще одна задача
спасибо за помощь. Я обязательно попробую
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / И еще одна задача / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]