|
|
|
| Добрый день!
Делаю программку удаления одинаковых элементов из отсортированного по возрастанию массива.
Блок сдвига элементов в массиве работает, когда его вставляю в прогу - она отказывается работать - виснет.
Никак не пойму в чем причина. Подскажите плиз.
#include <iostream.h>
#include <fstream.h>
#include <conio.h>
#include <stdio.h>
// удаление дубликатов в отсортированном по возрастанию массиве
int main()
{
const int size = 5; // количество элементов массива
int array[size]= {2,2,2,3,6};
int t=0;
for (int i=1; i<size-1; i++)
{
if (array[i]== array[i-1]) // если рядом стоящие элементы равны
{
do // сдвигать
{ // все
t=i; // элементы
array[t-1] = array[t]; // массива
t++; // на 1
} // элемент
while(t<size); // влево
array[size-1]=0; // записать ноль в конец массива
}
}
for(int i=0; i<size; i++) // вывод на экран
{
cout << array[i] << ",";
}
getchar();
return 0;
}
|
| |
|
|
|
|
|
|
|
для: beginner-c++
(26.05.2007 в 13:23)
| | 1)Во-первых, надо вынести t = i из цикла do...while
2)Во-вторых, Ваш алгоритм оставит лишнюю двойку. На вякий случай поправил.
Получилось так:
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h>
int main()
{
const int size = 5;
int array[size]= {2,2,2,3,6};
int t=0;
for (int i=1; i<size-1; i++)
{
if (array[i]== array[i-1])
{
t=i;
do
{
array[t-1] = array[t];
t++;
}
while(t<size);
array[size-1]=0;
i--; // если я ошибся с пунктом 2, уберите эту строку
}
}
for(int i=0; i<size; i++) // вывод на экран
{
std::cout << array[i] << ",";
}
getchar();
return 0;
}
|
| |
|
|
|
|
|
|
|
для: Фитч
(26.05.2007 в 13:39)
| | Благодарю -не ожидал такого быстрого ответа.
Заработало - проверил на нескольких наборах элементов.
Виснет на одном наборе - 2,2,2,2,6 - это когда присутствует строка c i--.
Без i-- оставляет лишнюю 2 при наборе - 2,2,2,2,6. | |
|
|
|
|
|
|
|
для: beginner-c++
(26.05.2007 в 14:05)
| | Дело в том, что ставя нули в конце, Вы создаете последовательность из одинаковых эл-тов.
Вот мое решение проблемы:
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h>
int main()
{
const int nSize = 5;
int anArray[nSize] = { 2 , 2, 2, 2, 7 };
int t = 0, i = 0;
int nNewSize = 5;
while(i < nSize - 1)
{
if(anArray[i] == 0)
{
break;
}
else
{
if(anArray[i] == anArray[i + 1])
{
t = i;
do
{
anArray[t] = anArray[t+1];
t++;
}
while(t < nSize - 1);
anArray[nSize-1] = 0;
}
else
{
i++;
}
}
for(int j=0; j<nSize;j++)
{
std::cout << anArray[j] << ",";
}
std::cout << std::endl;
}
return 0;
}
|
| |
|
|
|
|
|
|
|
для: Фитч
(26.05.2007 в 14:32)
| | Да про нули я как-то совсем упустил - уже мозги плавятся от жары.
Спасибо огромное! | |
|
|
|