Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
1 / 1 / 0
Регистрация: 12.11.2009
Сообщений: 10

счастливый билет

27.11.2009, 12:58. Показов 8939. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Определить является ли введенный в текстовое поле автобусный шестизначный билет счастливым. Объясни в каком смысле счастливый. Mid len функции которые нужно использовать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2009, 12:58
Ответы с готовыми решениями:

Счастливый билет и вычисление функции
Здравствуйте. Возникла проблема со следующими заданиями: 1) Написать программу, выводящую в столбец рабочего листа все счастливые...

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

счастье есть! задачка: счастливый билетик или нет
Здравствуйте, Уважаемые программисты!!!!! И вновь не могу дойти до завершения работы....Помогите пожалуйста доделать проект!!! Нужно было...

27
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
14.04.2010, 08:15
Студворк — интернет-сервис помощи студентам
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Комманда1_Click()
Dim I, J
Dim Bil As String, SimN As String, SimK As String, SumN As Byte, SumK As Byte
 
Список1.Clear
For J = 1001 To 999999
 
    Bil = IIf(Len(J) = 4, "00" & J, IIf(Len(J) = 5, "0" & J, J))
    SumN = 0
    SumK = 0
    For I = 1 To 3
        SimN = Mid(Bil, I, 1)
        SimK = Mid(Bil, I + 3, 1)
        SumN = Val(SumN) + Val(SimN)
        SumK = Val(SumK) + Val(SimK)
 
    Next I
          If SumN = SumK Then Список1.AddItem Bil: k = k + 1
Next J
MsgBox k, vbOKOnly, "Таких билетов"
End Sub
55251 столько их всего
0
as
39 / 25 / 6
Регистрация: 14.02.2009
Сообщений: 355
14.04.2010, 08:56
Если учитывать номер 000000, то их получиться 55252
0
 Аватар для Toxa33rus
3926 / 928 / 125
Регистрация: 16.04.2009
Сообщений: 1,996
14.04.2010, 09:54
Alex77755, задача-то уже решена! Вы на 3-й странице. Там проблема уже в другом - найти все билеты для 8-значного номера.

Могу предложить вместо цикла for использовать do loop и при нахождении счастливого увеличивать счетчик не на 1 а на [не знаю сколько но думаю что не меньше 9], а при НЕ нахождении на 1. Это все теория, может и не правильно посчитает. Сначала можно проверить на 6-значном.
0
здесь больше нет...
3376 / 1674 / 184
Регистрация: 03.02.2010
Сообщений: 1,219
14.04.2010, 11:26
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
Sub Комбинаторика_Рулит()
   Dim StartTime As Date
   Dim x1 As Byte, x2 As Byte, x3 As Byte, x4 As Byte, xMax As Byte, sMax As Byte
   Dim s As Byte
   Dim i As Integer
   Dim N As Long
 
   xMax = 9: sMax = 36
   StartTime = Timer
 
   For s = 0 To sMax
      i = 0
      For x4 = 0 To xMax
         For x3 = 0 To xMax
            For x2 = 0 To xMax
               For x1 = 0 To xMax
                  If s = x1 + x2 + x3 + x4 Then i = i + 1
               Next x1
            Next x2
         Next x3
      Next x4
      N = N + i ^ 2
   Next s
   '-----------
   MsgBox "Процедура выполнялась " & vbNewLine _
          & Format(Timer - StartTime, "0.000") & " сек", , N & " билетов"
End Sub
6 сотых секунды!!!
Еще можно ускорить (как советовал Ironegg) - преждевременный выход из цикла if s < x3 if s < x3+x2...
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
14.04.2010, 11:45
аналитика
комбинаторика это круть. Но
проблема уже в другом - найти все билеты для 8-значного номера.
А за 6 сотых только их количество.
Попробуй вывести все номера билетов куда-нибудь
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
15.04.2010, 06:32
непонятно. этот код должен летать по сравнению с простым перебором, так как здесь нет ни одного лишнего действия, и тем не менее он выполняется целых 5 сек, из которых 4 уходит на вторую группу циклов. (VBA Excel и пень4). скорее всего тормоза связаны с размером массива Bil? какие будут соображения?
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Public Sub a()
t = Timer
 
Dim arr(9999, 1) As Long
Dim I As Long, J As Long, k As Long, h As Long
    For I = 0 To 9
        For J = 0 To 9
            For k = 0 To 9
                For h = 0 To 9
                    arr(n, 0) = I + J + k + h
                    arr(n, 1) = n
                    n = n + 1
                Next h
            Next k
        Next J
    Next I
 
Debug.Print Timer - t
SortArr arr, adInteger, "0 ASC"
Debug.Print Timer - t
    
Dim Bil(4816029) As Long: n = 0: k = 0: h = 0
 
For I = 0 To 9999
    For J = 0 To 9999
        Bil(k) = arr(I, 1) * 10000& + arr(n, 1)
        k = k + 1
        If arr(n, 0) <> arr(n + 1, 0) Then
            h = IIf(I = n, n + 1, h)
            n = n + 1
            Exit For
        End If
        n = n + 1
    Next J
    n = h
    If n = 9999 Then Exit For
Next I
Bil(k) = arr(I + 1, 1) * 10000& + arr(n, 1) ' óæå íåò ñèë êóäà-òî ýòî ïðàâèëüíî âïèñûâàòü :)
 
Debug.Print "âðåìÿ âûïîëíåíèÿ - " & Timer - t & "ñ. â ìàññèâå âñå ñ÷àñòëèâûå íîìåðà"
Debug.Assert 0
    
End Sub
'ôóíêöèÿ ñîðòèðîâêè
 
Public Sub SortArr(ByRef myArr, arrDataType, strSort As String)
Dim x, I, y, myArrS
Dim rst As New ADODB.Recordset
 
With rst
'Ñîçäàåì ðåêîðäñåò
  With .Fields
      x = LBound(myArr, 2)
'      For Each myArrS In arrDataType
'         If myArrS = 129 Or myArrS = 200 Then
            .Append 0, adInteger '.Append X, myArrS, 255
'         Else
            .Append 1, adInteger '.Append X, myArrS
'         End If
            'X = X + 1
'      Next
  End With
  .CursorLocation = adUseClient
  .Open
        
'Çàïîëíÿåì ðåêîðäñåò
    For I = LBound(myArr, 1) To UBound(myArr, 1)
      .AddNew
      For y = 0 To UBound(myArr, 2) - LBound(myArr, 2)
        .Fields(y) = myArr(I, y + LBound(myArr, 2))
      Next y
   Next I
        
'Ñîðòèðóåì
        .Sort = strSort
        .MoveFirst
'Çàïîëíÿåì ìàññèâ
   For I = LBound(myArr, 1) To UBound(myArr, 1)
      For y = 0 To UBound(myArr, 2) - LBound(myArr, 2)
         myArr(I, y + LBound(myArr, 2)) = Trim$(.Fields(y))
      Next y
      .MoveNext
   Next I
        
   .Close
End With
Set rst = Nothing
End Sub


кстати, а вот для шести знака. вермя выполнения 0,125 сек
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
Public Sub раз_ивсе()
t = Timer
 
Dim arr(999, 1) As Long
Dim i As Long, j As Long, k As Long
    For i = 0 To 9
        For j = 0 To 9
            For k = 0 To 9
                arr(n, 0) = i + j + k
                arr(n, 1) = n
                n = n + 1
            Next k
        Next j
    Next i
 
SortArr arr, adInteger, "0 ASC"
    
Dim bil(55252) As Long: n = 0: k = 0
 
For i = 0 To 999
    For j = n To 999
        bil(k) = arr(i, 1) * 1000& + arr(n, 1)
        k = k + 1
        If arr(n, 0) <> arr(n + 1, 0) Then
            h = IIf(i = n, n + 1, h)
            n = n + 1
            Exit For
        End If
        n = n + 1
    Next j
    n = h
    If n = 999 Then Exit For
Next i
bil(k) = arr(i + 1, 1) * 1000& + arr(n, 1) ' уже нет сил :)
 
Debug.Print "время выполнения - " & Timer - t & "с. в массиве все счастливые номера"
Debug.Assert 0    
End Sub
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
15.04.2010, 07:46
Сортировку отключил - ругается на As New ADODB.Recordset
в дебагере 0,015625 ну очень быстро
но вот с этим не согласен в корне
Visual Basic
1
bil(k) = arr(i, 1) * 1000& + arr(n, 1)
123123 счастливый однозначно а 123132, 123231,123213 уже нет?
Кстати это касается и комбинаторики

дописал чтобы вывести и посмотреть
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
 I = UBound(Bil)
 Debug.Print I
 t = Timer
 For I = 0 To UBound(Bil) - 1
 If Bil(I) = 0 Then
 I = I
 End If
 Debug.Print I, Bil(I)
 Next I
 Debug.Print "время выполнения - " & Timer - t
End Sub
Ессно 10000 число и все последующие (4816029-10000) нули
4816029 это зачем
минут 10 подождал остановил вывод. не дождался. Хотя уже было выведено 3/4
дождался: время выполнения - 711,4688
Попробую ещё вывести в файл массивом
Основной тормоз в выводе информации, получается
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
15.04.2010, 10:46
без сортировки этот код работать не будет. попробую идею пояснить в коментах
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
t = Timer ' ýòî äëÿ èçìåðåíèÿ âðåìåíè
 
Dim arr(999, 1) As Long ' â ýòîì öèêëå ïîëó÷àåì âñå ïåðåñòàíîâêè èç òðåõ öèôð âî âòîðîì ïîëå ìàññèâà
Dim i As Long, j As Long, k As Long   ' è çàîäíî ñóììó êàæäîé ïåðåñòàíîâêè â ïåðâîì ïîëå
    For i = 0 To 9
        For j = 0 To 9
            For k = 0 To 9
                arr(n, 0) = i + j + k
                arr(n, 1) = n
                n = n + 1
            Next k
        Next j
    Next i
 
SortArr arr, adInteger, "0 ASC" ' ñîðòèðóåì ìàññèâ ïî ïîëþ ñ ñóììîé ïåðåñòàíîâêè ïî âîçðàñòàíèþ(õîòÿ è ïî óáûâàíèþ, íàâåðíî, áóäåò ðàáîòàòü).
'êîä ñîðòèðîâêè ñòûðèë íà ñîñåäíåì ôîðóìå. ñîðòèðîâêà èäåò ìåòîäîì âèðòóàëüíîãî ðåêîðäñåòà. íóæíî â ðåôåðåíñàõ óñòàíîâèòü
' ññûëó íà "microsoft ActiveX Data Object 2.8".
'íó èëè ñîðòèðîâàòü ëþáûì äðóãèì ñïîñîáîì
    
Dim bil(55252) As Long: n = 0: k = 0 ' áå... ïîâòîðíîå èñïîëüçîâàíèå ïåðåìåííûõ
 
For i = 0 To 999  ' â ýòîì öèêëå ôîðìèðóåì íîìåðà ñ÷. áèëëåòîâ ïóòåì ïåðåáîðà âñåõ ñî÷åòàíèé ïåðåñòàíîâîê ñ îäèíàêîâîé ñóììîé
    For j = n To 999
        bil(k) = arr(i, 1) * 1000& + arr(n, 1) ' ê êàæäîé ïåðåñòàíîâêå ïðèñîåäèíÿåì âñå ïåðåñòàíîâêè ñ òàêîé æå ñóììîé
        k = k + 1
        If arr(n, 0) <> arr(n + 1, 0) Then ' ïåðåñòàíîâêè îòñîðòèðîâàíû, ïîýòîìó ïðè èçìåíåíèè ñóììû â n-òîì ýëåìåíòå ìàññèâà ïåðåõîäèì ê ñëåäóþùåìó i
            h = IIf(i = n, n + 1, h)
            n = n + 1
            Exit For
        End If
        n = n + 1
    Next j
    n = h
    If n = 999 Then Exit For
Next i
bil(k) = arr(i + 1, 1) * 1000& + arr(n, 1) ' ??? ??? ??? :)
 
Debug.Print "????? ?????????? - " & Timer - t & "?. ? ??????? ??? ?????????? ??????"
Debug.Assert 0 ' вот здесь оно остановиться, и в Wath Window можно будет посмотреть массив
для лучшего понимания можно прогнать дебагером для i = 1 хотябы
Цитата Сообщение от Alex77755 Посмотреть сообщение
Ессно 10000 число и все последующие (4816029-10000) нули
4816029 это зачем
это от того, что сортировка отключена. 4816029 число счастливых восьмизначных билетов. опрделено этой же программой.
насколько я знаю. в Immediate помещается строчек 200. так что выводить надо дейсвительно в файл. может если сразу в файл аппендом выводить (минуя массив Bill), может оно и заработает с норамальной скоростью. ато прикинь девять метров массив таскать пять миллионов раз.
или может быстрее будет использовать в качестве буфера небольшой массив(килобайт 10, чтобы помещался в кеше процессора) и периодически его разгружать в файл.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2010, 10:46

Счастливый билет
Счастливый билет Уезжая утром в школу, ученик Саша заметил, что сумма цифр, стоящих на четных местах в его билете равна сумме цифр,...

Счастливый билет
Даны 2 положительных 3-значных числа a и c. Если сумма чисел числа a равна сумме чисел числа c, напечатать на экране &quot;Cчастливый...

Счастливый билет)
Нужна помощь ребят) Выручайте) Задание такое) В программе имеется каталог пассажиров, Выбрать пассажиров у которых счастливый билет)...

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

счастливый билет
Вводится шестизначное число .Определить является ли билет с этим номером счастливым ?с оптимизацией времени решения на турбо си!прошу...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru