Алгоритм
|
|
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]; }
|
|
| |
|
Ranger | Дата: Воскресенье, 26 Октября 2014, 12:21 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| Цитата Ramilyanamana ( ) нужно решение этой задачи в виде блок-схем ой мля!!
если на пальцах: преобразуем в строку. берем из строки каждый элемент ,преобразуем в число 0-9. есть массив из 3х элементов.(это и будут наибольшие числа) находим в массиве наименьшее число и если оно меньше полученного из строки числа, заменяем его на полученное из строки число. удачного рисования блок схемы!!
Кстати по поводу кода: лучше обойтись без преобразований в строку и обратно. достаточно делить / умножать на разрядность. но, переделывать уже не буду.
Сообщение отредактировал Ranger - Воскресенье, 26 Октября 2014, 12:25 |
|
| |
Ramilyanamana | Дата: Воскресенье, 26 Октября 2014, 12:27 | Сообщение # 7 |
Биззи Джей Ужасный
Сейчас нет на сайте
| Ranger, для меня как раз таки проблема. чтож буду думать) спасибо)
|
|
| |