![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| CENTR |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.1.2006 Репутация: нет Всего: нет |
Вообщем проблема с реализацией
#include <stdio.h> int main() { int source[]= {7,9,8,5,4,7,7};// исходный массив int n=7; int count[10]={0,0,0,0,0,0,0,0,0,0}; //инициализируем нулями. Как проще сделать я не знаю int i,c; int dest[10]; //выходной массив int k=0; for( i=0; i<n; i++) count [ source[i] ]++; //проходим исходный массив увеличивая count count[i]=count[0]+count[i-1]; //тут необходимо "присвоить count[i] значение, равное сумме всех элементов до данного" for ( i=0; i<n; i++ ) { c = source[i]; dest[ count[c] ] = c;// выходной массив count[c]++; // для повторяющихся чисел } while (k!=7){ printf ("%d",dest[k]); k++;//вывод массива } return (0); } Cобственно проблема в этом - "count[i]=count[0]+count[i-1]" - дословно необходимо "присвоить count[i] значение, равное сумме всех элементов до данного" - а как это сделать? p.s. возможны ошибки. p.p.s. источник http://algolist.manual.ru/sort/radix_sort.php p.p.p.s вообще мне нужно расположить эл. мсассива в порядке возр\убыв. |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Заведи переменную для суммы и на каждом проходе цикла добавляй (в конце) текущее count.
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| CENTR |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.1.2006 Репутация: нет Всего: нет |
хм...
так: for( i=1; i<n; i++) count[i]=count[i]+count[i-1]; суммируются только 2 эл., а мне нужно реализовать такую цепочку: count[i] = count[0]+count[1]+...count[i-1], т.е. count[i] должен иметь значение, равное сумме ВСЕХ элементов ДО данного |
|||
|
||||
| blackofe |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
|
||||
|
|||||
| blackofe |
|
||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
не совсем понятно, что делает твой алгоритм, но данная конкретная проблема решается, ведь, совсем просто:
Добавлено @ 19:48
собственно то, что я и написал выше. ведь count[0]+count[1]+...count[i-1] - ни что иное, как суммирование в цикле от 0 до i-1. Это сообщение отредактировал(а) blackofe - 19.1.2006, 19:41 |
||||||||
|
|||||||||
| CENTR |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 17.1.2006 Репутация: нет Всего: нет |
Пробуем:
#include <stdio.h> int main() { int source[]= {7,9,8,5,4,7,7}; int n=7; int count[]={0,0,0,0,0,0,0,0,0,0}; int i,j; int k=0; for( i=0; i<n; i++) count[source[i]]++; for( i=1; i<10; i++) { count[i] = 0; for(j = 0; j < i; ++j) count[i] += count[j]; } while (k!=10){ printf ("%d",count[k]); k++; } return (0); } Выводит одни нули а должен: 0, 0, 0, 0, 1, 2, 2, 2, 5, 6 |
|||
|
||||
| blackofe |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
естественно. у тебя ведь цикл от второго элемента до последнего, а первый элемент - 0 (массив до этого места у нас выглядит как { 0, 0, 0, 0, 1, 1, 0, 3, 1, 1 }). соответственно во второй элемент попадает сумма предыдущих - 0. в третий - тоже 0 (сумма первого и обнуленного второго). и так далее. тебе надо цикл перевернуть - суммировать от последнего до первого (вернее, до второго - для первого тебе суммировать нечего). смотри:
результат:
еще. пользуйся, пожалуйста, тегами [ code ]. так код читать удобнее. Это сообщение отредактировал(а) blackofe - 19.1.2006, 21:54 |
||||||
|
|||||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
Только ответ не может быть такой, как у тебя 0 0 0 0 1 2 3 9 16 32 UPS Это сообщение отредактировал(а) threef - 19.1.2006, 22:05 |
|||
|
||||
| blackofe |
|
||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 173 Регистрация: 29.11.2005 Репутация: 4 Всего: 4 |
кстати, мне тут все-таки не совсем понятно.
но ведь не получается второй массив таким, как написано. берем 5-й элемент. все 4 предыдущих - нули. сумма - 0. значит, в результате должен получиться тоже 0. а там стоит 1. непонятно.. Добавлено @ 22:22
т.е. сам i-й элемент не должен включаться в сумму. а значит:
со всеми вытекающими предыдущими нулями в результате. |
||||||||||
|
|||||||||||
| threef |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 27.10.2005 Где: Запорожье Репутация: 9 Всего: 10 |
blackofe
Ну...сфуфлил. Я ж сразу признал |
|||
|
||||
| Dov |
|
||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 15 Всего: 88 |
Так то же как-то не очень... возникает вопрос: зачем пересчитывать каждый раз то, что уже было однажды посчитано.
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |