Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Олимпиады

Страница: 1 |

 

  Вопрос: помогите найти агоритмы! Добавлено: 14.11.04 12:08  

Автор вопроса:  ashdan87 | Web-сайт: www.ashdan87.narod.ru/index1.html | ICQ: 347384533 
Помогите! Мне нужны алгоритмы
А) перевода чисел из двоичной системы счисления в десятичную
Б) как можно разрезать число многозначное, целочисленное число n по однозначным цифрам. Т.е 123 на 1 2 3, причем чтобы тип переменных был Integer
В) Как сделать такое: найти сумму всех трехзначных чисел, обладающих следующими свойствами: 100а + 10в + с = (10 + в)*с, где 1<=a<=9, 0<=b<=9, 0<=c<=9
Г) написать прогу, которая расставляет на месте знака «?» знаки математических действий (+, -, *,/). Пример: (((((1?2)?3)?4)?5)?6) = 35

Ответить

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

Номер ответа: 1
Автор ответа:
 ISpy



Разработчик Offline Client

Вопросов: 47
Ответов: 621
 Web-сайт: intermult.boom.ru
 Профиль | | #1
Добавлено: 14.11.04 12:25
А)Дели на 2.. ;) (и вообще почитай что-нить по двоичной системе счисления)
Б)Переведи в строку, отрезай по одному числу и используя Val, суй полученные числа в массив integer, например.

Ответить

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



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 14.11.04 14:38
A)
 Можно так поразрядно. Например,
 5432109876543210 <- номера разрядов
 1111000011110000 <- какое-то число
 Чтобы перевести разряд из 2-ной в 10-ную умножай значение разряда на 2 в степени номер разряда (справа на лево).
 Например число 1100 будет переводится так:
 ;(2^0*0) + (2^1*0) + (2^2*1) + (2^3*1) = 0+0+4+8=12
 3210 <- Номер разряда
 1100 <- Число
 Для проверки включи калькулятор в инженерном режиме и помедитируй. ;)

Б)
 Нужно знать самый большой разряд. В данном случае это сотни или 10^2
 ;Dim Source As Long, Result As Long
 Source = 423
 For ShowDigits = 2 To 0 Step -1
  Result = (Source - (Source Mod 10 ^ ShowDigits))
  MsgBox Result, , 10 ^ ShowDigits
  Source = Source - Result
 Next ShowDigits

В) и Г)
 Ну это уже не к нам вопрос. Это скорее математика чем программирование. Сам считай.

Ответить

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



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

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #3
Добавлено: 15.11.04 10:00
Г) Как-то около 4 лет назад в конференции СообЧа VB проводилась
олимпиада, с участием этой задачи. Задача на самом деле
примитивнейшая.
Первое место (считалось время выполнения кода) занял алгоритм с рекурсией.
Второе место - алгоритм с 5-ю сложенными циклами.
А я был молодой и глупый. Что такое рекурсия я еще не знал, а
использовать вложенные циклы не пришло в голову, поэтому сгромоздил
все в одном цикле и занял третье место, чем был очень доволен :)

В) Тут проще всего будет сделать 3 вложенных цикла по переменным a, b
и c, ИМХО.

Ответить

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



ICQ: 225421504 

Вопросов: 8
Ответов: 60
 Профиль | | #4 Добавлено: 21.12.05 21:09
не получится! Надо методом перебора решать!

Ответить

Номер ответа: 5
Автор ответа:
 Sergey



ICQ: 283551900 

Вопросов: 1
Ответов: 74
 Профиль | | #5 Добавлено: 21.12.05 22:41
Если b=9 и с=9 то (10+b)*с=171 тогда max(a)=1 и учитывая задание 1<=a<=9 данное условие может удовлетворять только при a=1 мы получаем:
100+10*b+c=(10+b)*c

  Sub Main()
    Dim I, S As Integer
    S = 0
    For I = 0 To 99
      '(I \ 10)->b
      '(I Mod 10)->c
      If 100 + I = (10 + (I \ 10)) * (I Mod 10) Then S += 100 + I
    Next
    Console.WriteLine(S)
  End Sub

Ответ S=0

В) Тут проще всего будет сделать 3 вложенных цикла по переменным a, b
и c, ИМХО.

А можно и одним! :)



Ответить

Страница: 1 |

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



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