Помагите с прогой

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Bzzzik
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 02.08.2003 (Сб) 22:21

Помагите с прогой

Сообщение Bzzzik » 02.08.2003 (Сб) 22:29

Люди, помагите написать такую прогу: есть ряд чисел от 1 до n (n<=1000) надо разбить этот ряд на максимально возможное кол - во пар, причем сумма чисел в паре должна быть нечетным числом.
P.S. Подскажите хотябы идею.
Зарание thanks.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 03.08.2003 (Вс) 5:43

Чётное + чётное = чётное
Чётное + нечётное = нечётное
Нечётное + нечётное = чётное

Думаю, исходя их этого алгоритм очевиден...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 03.08.2003 (Вс) 12:25

Если числа нельзя повторять то делим на 2 массива: чет и нечет и составляем пары пока один массив не опустеет (первое четное с первым нечетным и т д).
Если можно повторять (из ряда 1234 надо получить: 12 14 21 23 32 34 41 43) то перебираем первое ечетное со всеми, потом второе... И так же с нечетными.
Хотя может я зря так подробно... :?

Bzzzik
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 02.08.2003 (Сб) 22:21

Сори за неправильное написание

Сообщение Bzzzik » 03.08.2003 (Вс) 16:35

Черт, вот до чего доводят одновременное смотрение телика и написание темы в форуме. Извиняюсь за ошибки:
1 - Тема Помогите..., а не Помагите...
2 - Сумма чисел в паре должна быть простым числом, а не нечетным!!!

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Re: Сори за неправильное написание

Сообщение FaKk2 » 04.08.2003 (Пн) 0:12

Bzzzik писал(а):2 - Сумма чисел в паре должна быть простым числом, а не нечетным!!!


Это вроде то, что делится, только на себя и на 1?
Тогда, добавь цикл, который от 1 до n будет искать кол-во делителей :wink:
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 04.08.2003 (Пн) 7:53

простое число это будет всегда нечетное число(и еще 2)
а цикл надо делать до корня квадратного из n
Ничто так не ограничивает полёт мысли программиста, как компилятор

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Re: Помагите с прогой

Сообщение GoGosha » 05.08.2003 (Вт) 12:50

Bzzzik писал(а):Люди, помагите написать такую прогу: есть ряд чисел от 1 до n (n<=1000) надо разбить этот ряд на максимально возможное кол - во пар , причем сумма чисел в паре должна быть нечетным числом.
P.S. Подскажите хотябы идею.
Зарание thanks.

А тебе не кажется, что пар всегда будет n / 2
http://poetry.mooo.com
http://poetry.myboard.info
«Человек есть нечто, что до́лжно превзойти» (Ф. Ницше)

Bzzzik
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 02.08.2003 (Сб) 22:21

Прошу пояснить...

Сообщение Bzzzik » 10.08.2003 (Вс) 14:29

corgi писал(а):простое число это будет всегда нечетное число(и еще 2)
а цикл надо делать до корня квадратного из n

Чуть чуть поконкретнее, как это сделать?

P.S. Сорри за непонятливость, но тормоз - тоже механизм! :roll:

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 10.08.2003 (Вс) 16:18

Задачу надо разбить на две части:
1. получить максимальное кол-во пар
2. сумма пар чисел должна быть простым числом

1. максимальное кол-во пар получим, если будем складывать подряд все числа. Т.к. сумма должна быть простым числом, то она должна быть нечётным числом. Значит надо складывать чётное + нечётное. В условии не оговорено, что суммы должны быть уникальными, т.е., иначе говоря, могут быть одинаковыми. Чтобы получить максимальное кол-во нечётных одинаковых сумм будем складывать последнее число с первым (1000+1=1001), предпоследнее со вторым (999+2=1001) и т.д. Т.о. получим n\2 пар чисел. Причём все суммы будут одинаковы.

2. найдём простое число, наиболее близкое к 1001. В бОльшую сторону 1009, в меньшую 997. В первом случае мы жертвуем 4-мя парами, во втором только двумя. Значит выбираем второй вариант 997 = 996+1. Кол-во пар 498=996\2.

Определение простого числа
Код: Выделить всё
Public Function IsSimple(ByVal n As Long) As Boolean
   
    Dim i&, m&
   
    IsSimple = True
    If (n < 4) Then Exit Function
   
    IsSimple = False
    If (n Mod 2 = 0) Then Exit Function
   
    m = Sqr(n)
   
    For i = 3 To m Step 2
        If (n Mod i = 0) Then
            Exit Function
        End If
    Next
    IsSimple = True
   
End Function

Алекс
Обычный пользователь
Обычный пользователь
 
Сообщения: 84
Зарегистрирован: 30.04.2003 (Ср) 15:59
Откуда: Краснодар

Re: Помагите с прогой

Сообщение Алекс » 11.08.2003 (Пн) 7:13

GoGosha писал(а):
Bzzzik писал(а):Люди, помагите написать такую прогу: есть ряд чисел от 1 до n (n<=1000) надо разбить этот ряд на максимально возможное кол - во пар , причем сумма чисел в паре должна быть нечетным числом.
P.S. Подскажите хотябы идею.
Зарание thanks.

А тебе не кажется, что пар всегда будет n / 2

Вот тебе 4 числа, попробуй разбей их на две пары: 2, 5, 82, 106.
Алекс.

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Re: Помагите с прогой

Сообщение GoGosha » 11.08.2003 (Пн) 10:13

Алекс писал(а):
GoGosha писал(а):
Bzzzik писал(а):Люди, помагите написать такую прогу: есть ряд чисел от 1 до n (n<=1000) надо разбить этот ряд на максимально возможное кол - во пар , причем сумма чисел в паре должна быть нечетным числом.
P.S. Подскажите хотябы идею.
Зарание thanks.

А тебе не кажется, что пар всегда будет n / 2

Вот тебе 4 числа, попробуй разбей их на две пары: 2, 5, 82, 106.


Чёто я не понял...

[2,5][82,106]
http://poetry.mooo.com
http://poetry.myboard.info
«Человек есть нечто, что до́лжно превзойти» (Ф. Ницше)

Tauron
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 187
Зарегистрирован: 14.07.2002 (Вс) 17:43
Откуда: Kazakhstan

Сообщение Tauron » 11.08.2003 (Пн) 16:54

2GoGosha:
Ну да, а 188 конечно же простое число.
Трезвая голова, холодный ум и ледяное сердце.

Bzzzik
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 02.08.2003 (Сб) 22:21

Опять я...

Сообщение Bzzzik » 12.08.2003 (Вт) 12:02

skiperski, судя по твоей прог-ме из ряда чисел от 1 до 27 отбрасываются числа 1 и 2, из которых можно было бы создать пару.
Может я чего-то недопонял?!

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Re: Опять я...

Сообщение skiperski » 26.08.2003 (Вт) 19:31

Bzzzik писал(а):skiperski, судя по твоей прог-ме из ряда чисел от 1 до 27 отбрасываются числа 1 и 2, из которых можно было бы создать пару.
Может я чего-то недопонял?!

Не в программе, а в алгоритме, но, действительно, лажанулся. Надо ещё раз натравить ентот алгоритм на остаток.

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 27.08.2003 (Ср) 7:20

Public Function IsSimple(ByVal n As Long) As Boolean

Dim i&, m&

IsSimple = True
If (n < 4) Then Exit Function

IsSimple = False
If (n Mod 2 = 0) Then Exit Function

m = Sqr(n)

For i = 3 To m Step 2
If (n Mod i = 0) Then
Exit Function
End If
Next
IsSimple = True

End Function


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

Простое число большее 6 имеет вид 6n +/- 1.
8) Ну и еще 1,2,3

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 27.08.2003 (Ср) 12:39

GAGArin писал(а):Сразу видно програмистский подход к проблеме, но не стоит забывать и о математике.

Простое число большее 6 имеет вид 6n +/- 1.
8) Ну и еще 1,2,3

А я и не забываю! Трудно забыть то чего никогда не знал. :)
А это точно? Достоверно на 100%?

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 27.08.2003 (Ср) 19:39

А ты проверь... :wink:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 19

    TopList