Пятница, 15 Ноября 2024, 13:37

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Алгоритм
RamilyanamanaДата: Воскресенье, 26 Октября 2014, 09:42 | Сообщение # 1
Биззи Джей Ужасный
Сейчас нет на сайте
Помогите пожалуйста составить алгоритм решения задачи:
Для заданного целого числа найти сумму трех его старших цифр.
Вроде бы легко. а ничего придумать не могу)



LunarPixelДата: Воскресенье, 26 Октября 2014, 10:03 | Сообщение # 2
старожил
Сейчас нет на сайте
Ну, как вариант, пробегаешься по числу 3 раза, каждый раз удаляя (и записывая куда-нибудь) из него наибольшую цифру. Ну и сразу на моменте записи наибольшего числа плюсуешь его к прошлому.
Наибольшую цифру на каждом проходе находишь, записав в переменную первую цифру числа и сравнивая эту переменную с последующими цифрами, в случае, если последующая цифра больше записанной, то перезаписываешь на нее.


RamilyanamanaДата: Воскресенье, 26 Октября 2014, 10:36 | Сообщение # 3
Биззи Джей Ужасный
Сейчас нет на сайте
LunarPixel, а разве старшие цифры это не те цифры, которые относятся к сотням например, или к тысячам?

Добавлено (26.10.2014, 11:36)
---------------------------------------------
Ну а вообще мне бы хотелось знать, как с помощью алгоритма пробежаться по всем n-числам



RangerДата: Воскресенье, 26 Октября 2014, 11:48 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Си компилятора нет под рукой.
накидал алгоритм на шарпах.
Цитата
source 999 result 27
source 123 result 6
source 24102014 result 10


Код
    int DigitSumm(int number){
   
   int [] MajorDigits = new int[3];
   string strDigit = number.ToString();

    for (int i = 0; i < strDigit.Length;i++)
     {
      int valueFromStr=0;
      try
      {
       valueFromStr = Convert.ToInt16(strDigit.Substring(i,1));
      }
      catch( Exception ex )
      {
       valueFromStr = 0;
       continue;
      }
      int minimalSavedDigitIndex = 0;
      for(int j = 0; j < MajorDigits.Length;j++)
      {
       if(MajorDigits[minimalSavedDigitIndex] > MajorDigits[j])
        minimalSavedDigitIndex = j;
      }
      if(MajorDigits[minimalSavedDigitIndex] < valueFromStr)
       MajorDigits[minimalSavedDigitIndex] = valueFromStr;
     }
   return MajorDigits[0]+MajorDigits[1]+MajorDigits[2];
  }


RamilyanamanaДата: Воскресенье, 26 Октября 2014, 12:15 | Сообщение # 5
Биззи Джей Ужасный
Сейчас нет на сайте
Ranger, видимо меня неправильно поняли shy . мне не нужен код. мне нужно решение этой задачи в виде блок-схем))


RangerДата: Воскресенье, 26 Октября 2014, 12:21 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
Цитата Ramilyanamana ()
нужно решение этой задачи в виде блок-схем

ой мля!! blink

если на пальцах:
преобразуем в строку. берем из строки каждый элемент ,преобразуем в число 0-9.
есть массив из 3х элементов.(это и будут наибольшие числа)
находим в массиве наименьшее число и если оно меньше полученного из строки числа, заменяем его на полученное из строки число.
удачного рисования блок схемы!! biggrin

Кстати по поводу кода: лучше обойтись без преобразований в строку и обратно. достаточно делить / умножать на разрядность.
но, переделывать уже не буду.




Сообщение отредактировал Ranger - Воскресенье, 26 Октября 2014, 12:25
RamilyanamanaДата: Воскресенье, 26 Октября 2014, 12:27 | Сообщение # 7
Биззи Джей Ужасный
Сейчас нет на сайте
Ranger, для меня как раз таки проблема. чтож буду думать) спасибо)


  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг