Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 08.06.2016
Сообщений: 5
1

Массив: Найти сумму трех минимальных из массива двузначных чисел

14.06.2016, 14:37. Показов 1752. Ответов 33
Метки нет (Все метки)

Дан массив из десяти целых двузначных чисел. Найти сумму трех минимальных из них
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2016, 14:37
Ответы с готовыми решениями:

Найти сумму минимальных элементов одномерного массива
Помогите пзлы. Одномерный массив, найти сумму минимальных элементов массива

Найти сумму трех минимальных элементов массива
В масиве 12 элементов которые вводит пользователь. Найти сумму трех минимальных элементов.

Найти сумму минимальных Чисел в каждой строке массива
Есть массив 3на3. Нужно сложить максимальные значения каждой строки. В данный момент имею вот это :...

Найти индекс трех минимальных элементов массива
В чем ошибка? Первых два индекса считает, третий не правильно. МОЖЕТ ЕСТЬ СПОСОБ ПОЛЕГЧЕ int...

33
oh my god
1446 / 785 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
14.06.2016, 15:36 2
Казалось бы всё просто, но пришлось немного подумать над решением.
И вот что я придумал !

Код для пустой формы:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
Option Explicit
'Дан массив из десяти целых двузначных чисел. Найти сумму трех минимальных из них
Dim WithEvents c As CommandButton, l&, t&, w&, h&
Const r = 90
 
Private Sub c_Click()
    Static i&, j&, v
    ReDim a$(1 To 10)
    ReDim b$(1 To 3)
    Randomize Timer
    'Создаём массив и _
    делаем так, чтобы ни одно число не повторилось
    For i = 1 To UBound(a)
        Do
            j = 10 + Fix(Rnd * 80)
            If InStr(1, Join(a), j) = 0 Then a(i) = 10 + j: Exit Do
        Loop
    Next
    v = a: q a, 1, 10
    For i = 1 To UBound(b)
        b(i) = a(i)
    Next
    MsgBox "Два массива:" & vbLf & _
    "Десятка чисел: " & Join(v, ",") & vbLf & _
    "Наименьшие из них: " & Join(b, ","), 64
    c.Caption = "Продолжить"
End Sub
 
Private Sub Form_Load()
    l = r: t = r: w = r * 20: h = r * 4
    Set c = Controls.Add("vb.CommandButton", "c")
    With c
        .Move l, t, w, h
        .Caption = "Начать"
        .Visible = 1
    End With
End Sub
 
Private Sub q(j$(), ll&, hh&)
    Dim i&, l&, s$, w$
    i = ll: l = hh: s = j((i + l) \ 2)
    Do Until i > l: Do While j(i) < s: i = i + 1: Loop: Do While j(l) > s: l = l - 1: Loop
        If (i <= l) Then w = j(i): j(i) = j(l): j(l) = w: i = i + 1: l = l - 1
    Loop
    If ll < l Then q j, ll, l
    If i < hh Then q j, i, hh
End Sub
0
Миниатюры
Массив: Найти сумму трех минимальных из массива двузначных чисел  
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
15.06.2016, 18:06 3
fever brain
А не проще ли было просто отсортировать массив
и найти сумму трех крайних наименьших элементов?
0
oh my god
1446 / 785 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
15.06.2016, 18:10 4
Цитата Сообщение от geh Посмотреть сообщение
fever brain
А не проще ли было просто отсортировать массив
и найти сумму трех крайних наименьших элементов?
geh, а вы внимательно посмотрели что я сделал, обратите внимание на процедуру *q*
0
oh my god
1446 / 785 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
15.06.2016, 19:44 5
Единственное чего я не сделал, не посчитал.
Исправил. (просто я торопился на футбол, и зря торопился )
Кликните здесь для просмотра всего текста
Наши всёравно продули


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Option Explicit
'Дан массив из десяти целых двузначных чисел. Найти сумму трех минимальных из них
Dim WithEvents c As CommandButton, l&, t&, w&, h&
Const r = 90
 
Private Sub c_Click()
    Static i&, j&, v, sum&
    ReDim a$(1 To 10)
    ReDim b$(1 To 3)
    Randomize Timer
    'Создаём массив и _
    делаем так, чтобы ни одно число не повторилось
    For i = 1 To UBound(a)
        Do
            j = 10 + Fix(Rnd * 80)
            If InStr(1, Join(a), j) = 0 Then a(i) = 10 + j: Exit Do
        Loop
    Next
    v = a: q a, 1, 10
    
    For i = 1 To UBound(b)
        b(i) = a(i)
        sum = sum + b(i)
    Next
    
    MsgBox "Два массива:" & vbLf & _
    "Десятка чисел: " & Join(v, ",") & vbLf & _
    "Наименьшие из них: " & Join(b, ",") & vbLf & _
    "Полученная сумма: " & sum, 64
    c.Caption = "Продолжить"
End Sub
 
Private Sub Form_Load()
    l = r: t = r: w = r * 20: h = r * 4
    Set c = Controls.Add("vb.CommandButton", "c")
    With c
        .Move l, t, w, h
        .Caption = "Начать"
        .Visible = 1
    End With
End Sub
 
Sub q(v, ll&, hh&)
    'Для вариантов
    Dim i&, l&, s, w
    i = ll: l = hh: s = v((i + l) \ 2)
    Do Until i > l: Do While v(i) < s: i = i + 1: Loop: Do While v(l) > s: l = l - 1: Loop
        If (i <= l) Then w = v(i): v(i) = v(l): v(l) = w: i = i + 1: l = l - 1
    Loop
    If ll < l Then q v, ll, l
    If i < hh Then q v, i, hh
End Sub
1
Миниатюры
Массив: Найти сумму трех минимальных из массива двузначных чисел  
411 / 248 / 118
Регистрация: 26.12.2012
Сообщений: 786
16.06.2016, 01:43 6
По моему этого достаточно.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Option Explicit
Dim A(1 To 10) As Integer
Dim Min1 As Integer, Min2 As Integer, Min3 As Integer, i As Integer, Max As Integer
Private Sub Form_Load()
    A(1) = 11
    A(2) = 12
    A(3) = -31
    A(4) = 0
    A(5) = 11
    A(6) = 52
    A(7) = 64
    A(8) = 44
    A(9) = 52
    A(10) = 15
    Min1 = A(1)
    Max = Min1
End Sub
Private Sub Form_Click()
For i = 2 To UBound(A, 1)
    If A(i) > Max Then Max = A(i)
Next
    
    Min1 = Max: Min2 = Max: Min3 = Max
For i = 2 To UBound(A, 1)
    If A(i) < Min1 And A(i) <> Min2 And A(i) <> Min3 Then Min1 = A(i)
    If A(i) < Min2 And A(i) <> Min1 Then Min2 = A(i)
    If A(i) < Min3 And A(i) <> Min2 And A(i) <> Min1 Then Min3 = A(i)
   
Next
    
    Print Min1
    Print Min2
    Print Min3
End Sub
Кликнуть по форме.
1
oh my god
1446 / 785 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
16.06.2016, 11:30 7
Цитата Сообщение от Genn55 Посмотреть сообщение
По моему этого достаточно.
У вас что дефицит фантазии? вы сравните чем отличается моё решение от вашего

1 - Рандомное создание массива с двухзначными числами (каждый раз новый ряд чисел)
2 - Исключение возможности повтора в ряде чисел (^при таком создании)
3 - Информативно написанный код, (полезные знания и коментарии)
4 - Дружественный интерфейс программы (живое общение между человеком и компьютером)
5 - БОНУС ! - Алгоритм сортировки с вариантными элементами массива (Процедура q)

На всё про всё 54 строчки, студенту за эти писульки не пять поставят, а шесть !
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
29238 / 15991 / 3181
Регистрация: 12.02.2012
Сообщений: 26,312
Записей в блоге: 5
16.06.2016, 17:32 8
geh, если в массиве 10 элементов, то проще. А если 10 тыс - то сильно непроще.

Добавлено через 5 минут
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Function S3min(A() as long)  as long
      n%=Ubound(A,1)
      For i%=1 to n%-1
          For j%=i%+1 to n%
               if A(i%)>A(j%) then
                  tmp&=A(i%)
                  A(i%)=A(j%)
                  A(j%)=tmp&
               end if
          Next j%
     Next i% 
     S3min=A(1)+A(2)+A(3)
End Function
И все. Но решение с сортировкой нехорошее, т.к. оно модифицирует исходный массив, чего следует избегать. Можно, конечно, сделать копию массива, но это лишний расход памяти.
1
Заблокирован
16.06.2016, 19:12 9
Цитата Сообщение от fever brain Посмотреть сообщение
Казалось бы всё просто, но пришлось немного подумать над решением.
И вот что я придумал !
fever brain!
Пожалуйста, переведите мне код Catstail, выше — на нормальный язык Visual Basic 6.0 с Option Explicit. Очень прошу, хочу понять и проверить.
То же самое прошу сделать с кодом Catstail в теме Что в голове у Visual Basic 6.0?

Вы молодец! Ваша мысль, ниже — мне искренне понравилась своей простотой и ясностью.
Visual Basic
1
2
a = Split(InputBox("Введите  10  чисел, разделённых пробелами", , "23 76 12 98 67 82 15 16 61 58"))
MsgBox (CLng(a(3)) + CLng(a(7)) + CLng(a(8)))
0
411 / 248 / 118
Регистрация: 26.12.2012
Сообщений: 786
16.06.2016, 21:45 10
___
0
Заблокирован
16.06.2016, 22:34 11
Цитата Сообщение от Infinity20_5 Посмотреть сообщение
переведите мне код Catstail, выше — на нормальный язык Visual Basic 6.0 с Option Explicit
fever brain!
Спасибо. Разобрался самостоятельно благодаря Вашей подсказке в той теме, где показали процедуру: Private Sub Form_Load()
В самом коде мне всё понятно, речь о пузырьковой сортировке.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
Dim A$(), S&
Function S3min(A() As Long) As Long
      n% = UBound(A, 1)
      For i% = 1 To n% - 1
          For j% = i% + 1 To n%
               If A(i%) > A(j%) Then
                  tmp& = A(i%)
                  A(i%) = A(j%)
                  A(j%) = tmp&
               End If
          Next j%
     Next i%
     S3min = A(1) + A(2) + A(3)
End Function
Private Sub Form_Load()
A = Split(InputBox("Введите   10  чисел, разделённых пробелом", , "23 76 12 98 67 82 15 16 61 58"))
    MsgBox (CLng(A(2)) + CLng(A(6)) + CLng(A(7)))
    Text1.Text = Text1.Text & (CLng(A(2)) + CLng(A(6)) + CLng(A(7))) & vbTab
End Sub
 
'12 + 15 + 16 = 43
0
6141 / 908 / 305
Регистрация: 25.02.2011
Сообщений: 1,292
Записей в блоге: 1
16.06.2016, 22:56 12
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Пара вариантов

Visual Basic
1
2
3
4
5
6
7
8
9
Function Sum3Min1(arr() As Long) As Long 'массив arr должен быть определен как arr(1 to n)
    Dim i As Long, j As Long, tmp As Long, a() As Long
    a = arr
    For i = 1 To 3
        For j = i + 1 To UBound(a)
            If a(i) > a(j) Then tmp = a(i): a(i) = a(j): a(j) = tmp
    Next j, i
    Sum3Min1 = a(1) + a(2) + a(3)
End Function
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Function Sum3Min2(arr() As Long) As Long 'для целых положительных чисел меньше 100
    Dim i As Long, j As Long
    ReDim b(99) As Long
    For i = 1 To UBound(arr)
        b(arr(i)) = b(arr(i)) + 1
    Next i
    i = 1
    Do
        If b(i) > 0 Then
            b(i) = b(i) - 1
            j = j + 1
            Sum3Min2 = Sum3Min2 + i
        Else
            i = i + 1
        End If
    Loop While j < 3
End Function
Вариант 1 - нет необходимости сортировать весь массив пузырьком, достаточно только первые три элемента, это даст существенное сокращение расчетов при большой размерности массива - 10000 и более
количество итераций в зависимости от размерности массива не квадратичная, а линейная
не n*(n-1)/2, а 3*n - 6

Вариант 2 - подходит для случая, когда размерность массива большая, а максимальный элемент небольшой
Для двузначных чисел идеально подходит.
по исходному массиву проходим только один раз, максимальное количество итераций: n+99
3
411 / 248 / 118
Регистрация: 26.12.2012
Сообщений: 786
16.06.2016, 23:26 13
Извиняюсь за свой косяк.Исправил
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Form_Click()
For i = 2 To UBound(A, 1)
    If A(i) > Max Then Max = A(i)
Next
  
    Min1 = Max
For i = 1 To UBound(A, 1)
    If A(i) < Min1 Then
        Min3 = Min2
        Min2 = Min1
        Min1 = A(i)
    ElseIf A(i) < Min2 And A(i) <> Min1 Then
        Min3 = Min2
        Min2 = A(i)
    ElseIf A(i) < Min3 And A(i) <> Min2 And A(i) <> Min1 Then
        Min3 = A(i)
   End If
Next
Print "Сумма мимальных элементов =  "; Min1 + Min2 + Min3
Print "Первый минимальный злемент =  "; Min1
Print "Второй минимальный злемент =  "; Min2
Print "Третий минимальный злемент =  "; Min3
End Sub
На какой картинке правильно?
0
Миниатюры
Массив: Найти сумму трех минимальных из массива двузначных чисел   Массив: Найти сумму трех минимальных из массива двузначных чисел  
oh my god
1446 / 785 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.06.2016, 18:05 14
Цитата Сообщение от Genn55 Посмотреть сообщение
Извиняюсь за свой косяк.Исправил
Мне чтото подсказывает что Ваш вариант работать не будет
Я ваш алгоритм уловил, тоесть суть какая:
просматриваеться массив, для того чтобы найти первое минимальное, затем первое минимальное
передаёт значение второму, второе третьему.
Так вот, алгоритм нерабочий

Я тоже хотел так сделать, но в итоге пришел к *быстрой сортировке* (qSort)
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
29238 / 15991 / 3181
Регистрация: 12.02.2012
Сообщений: 26,312
Записей в блоге: 5
17.06.2016, 19:10 15
Все участники не заметили очень важное условие: "... двузначных чисел..." Сортировка здесь вообще не нужна. Никакая. Вот код, который найдет сумму трех минимальных любой совокупности двузначных чисел:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Function Sum3min(A() As Integer) As Integer
Dim Q(1 To 99) As Integer
    For i% = 1 To UBound(A, 1)
        p% = A(i%)
        Q(p%) = Q(p%) + 1
    Next i%
    S% = 0
    n% = 3
    For i% = 1 To 99
        k% = Q(i%)
        If k% > 0 Then
           Do While (n% > 0) And (k% > 0)
              S% = S% + i%
              n% = n% - 1
              k% = k% - 1
           Loop
        End If
        If n% = 0 Then Exit For
    Next i%
    Sum3min = S%
End Function
 
Sub Test()
Dim X(1 To 10) As Integer
    X(1) = 56
    X(2) = 12
    X(3) = 4
    X(4) = 88
    X(5) = 17
    X(6) = 16
    X(7) = 34
    X(8) = 62
    X(9) = 10
    X(10) = 23
    Debug.Print Sum3min(X)
End Sub
0
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
17.06.2016, 19:56 16
это не решение, но
Visual Basic
1
2
3
4
5
6
7
8
9
'List1.Sorted=True 'в свойствах
For i = 1 To 10
List1.AddItem Int(Rnd * 90) + 10
Next
s = 0
For i = 1 To 3
s = s + List1.List( i-1)
Next
MsgBox s
0
6141 / 908 / 305
Регистрация: 25.02.2011
Сообщений: 1,292
Записей в блоге: 1
17.06.2016, 20:02 17
Цитата Сообщение от Catstail Посмотреть сообщение
Все участники не заметили очень важное условие:
Борис, а как же второй мой вариант из 12го сообщения.
Чем он принципиально отличается?
1
Модератор
Эксперт функциональных языков программированияЭксперт Python
29238 / 15991 / 3181
Регистрация: 12.02.2012
Сообщений: 26,312
Записей в блоге: 5
17.06.2016, 20:10 18
m-ch, Виноват... Все, кроме Вас.
0
oh my god
1446 / 785 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
17.06.2016, 21:36 19
Цитата Сообщение от gaw Посмотреть сообщение
это не решение, но
s у вас не объявлен, а у ListBox и его свойство List имеет строчный тип
а вот давайте проведём эксперимент не будем это писать s=0, пропустим
чтобы тип не присвоился автоматически

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
'Option Explicit
'List1.Sorted = True 'в свойствах
Private Sub Form_Click()
    For i = 1 To 10
        List1.AddItem Int(Rnd * 90) + 10
    Next
'    s = 0
    For i = 1 To 3
        s = s + List1.List(i - 1)
    Next
    MsgBox s
End Sub
0
Миниатюры
Массив: Найти сумму трех минимальных из массива двузначных чисел  
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
17.06.2016, 21:46 20
это кодище не для "проведём эксперимент"
но
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
Dim i%, s$
 
 
 
'List1.Sorted = True 'в свойствах
Private Sub Form_Click()
    For i = 1 To 10
        List1.AddItem Int(Rnd * 90) + 10
    Next
'    s = 0
    For i = 1 To 3
        s = Val(s) + CInt(List1.List(i - 1))
    Next
    MsgBox s
End Sub
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2016, 21:46

Помощь в написании контрольных, курсовых и дипломных работ здесь.

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

Найти новое трехзначное число путем вычеркивания трех минимальных чисел
Дано шестизначное число N. Найти новое трехзначное число путем вычеркивания трех минимальных чисел...

Последовательности чисел. Найти сумму и произведение отрицательных двузначных чисел
Вводится 25 чисел. найти сумму и произведение отрицательных двузначных чисел

Найти в последовательности натуральных чисел сумму двузначных чисел, начинающихся на 7
Напишите программу, которая в последовательности натуральных чисел определяет сумму двузначных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.