Здраствуйте, у меня есть программа которая выполнякт это условие: Дан массив a. После каждой группы подряд идущих одинаковых элементов добавить новый элемент содержащий длину последовательности.
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n, i, k = 0, t = 0; // объявление переменных
scanf ("%d", &n); // считываем размер N массива A
int a[n + 1], b[n + 1]; // объявляем массивы
for (i = 1; i <= n; i++)
{
scanf ("%d", &a); // считываем массив А
if (a != a[i - 1] && i != 1)
{
k++;
b[k] = t;
t = 1;
}
else
{
t++;
}
k++;
b[k] = a;
}
k++;
b[k] = t;
for (i = 1; i <= k; i++)
printf ("%d ", b); // выводим полученный массив на экран
system("PAUSE");
return 0;
}
Вопрос в том как записать эту задачу через добавлениие или удаление массивов?
Другие языки программирования и технологии
Добавление удаление массивов
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
int main() {
size_t size = 25;
int * a = new int [size];
srand(unsigned(time(NULL)));
for (size_t n = 0; n < size; n++) a[n] = 1 + rand() % 2;
streamsize w = 2;
for (size_t n = 0; n < size; n++) cout << setw(w) << a[n];
cout << endl;
size_t newsize = size;
bool x = true;
for (size_t n = 1; n < size; n++)
if (x && a[n - 1] == a[n]) {
++newsize;
x = false;
} else if (a[n - 1] != a[n]) x = true;
int * t = new int [size];
for (size_t n = 0; n < size; n++) t[n] = a[n];
delete[] a;
a = NULL;
a = new int [newsize];
size_t n = 1, m = 1, count = 1;
a[0] = t[0];
x = false;
while (n <= size) {
if (n == size && count > 1) {
a[m] = count;
break;
}
a[m++] = t[n];
if (t[n - 1] == t[n]) {
x = true;
++count;
} else if (x) {
a[m - 1] = count;
a[m++] = t[n];
x = false;
count = 1;
}
++n;
}
for (size_t n = 0; n < newsize; n++) cout << setw(w) << a[n];
cout << endl;
delete[] a;
delete[] t;
cin.get();
return 0;
}
#include <iomanip>
#include <ctime>
using namespace std;
int main() {
size_t size = 25;
int * a = new int [size];
srand(unsigned(time(NULL)));
for (size_t n = 0; n < size; n++) a[n] = 1 + rand() % 2;
streamsize w = 2;
for (size_t n = 0; n < size; n++) cout << setw(w) << a[n];
cout << endl;
size_t newsize = size;
bool x = true;
for (size_t n = 1; n < size; n++)
if (x && a[n - 1] == a[n]) {
++newsize;
x = false;
} else if (a[n - 1] != a[n]) x = true;
int * t = new int [size];
for (size_t n = 0; n < size; n++) t[n] = a[n];
delete[] a;
a = NULL;
a = new int [newsize];
size_t n = 1, m = 1, count = 1;
a[0] = t[0];
x = false;
while (n <= size) {
if (n == size && count > 1) {
a[m] = count;
break;
}
a[m++] = t[n];
if (t[n - 1] == t[n]) {
x = true;
++count;
} else if (x) {
a[m - 1] = count;
a[m++] = t[n];
x = false;
count = 1;
}
++n;
}
for (size_t n = 0; n < newsize; n++) cout << setw(w) << a[n];
cout << endl;
delete[] a;
delete[] t;
cin.get();
return 0;
}
так... .
если ты фанат Си стайла - есть realloc
если нет - то: delete[] array; array = new int[ m];
если ты фанат Си стайла - есть realloc
если нет - то: delete[] array; array = new int[ m];
Можно сделать в два прохода - сначала посчитать длину результирующего массива, а за второй проход заполнить его. А можно поступить другим способом - рассмотреть самых худший вариант, в котором нет двух одинаковых чисел подряд. В таком случае можно обойтись без первого прохода, а выделить массив в два раза больше исходного.
массив можно выделить таким способом
int * array = (int*) calloc( n, sizeof(int));
удалить массив функцией free(array);
Упс. Ваш код претендует на С++..тогда выделяйте с помощью оператора new, а удаляйте оператором delete
массив можно выделить таким способом
int * array = (int*) calloc( n, sizeof(int));
удалить массив функцией free(array);
Упс. Ваш код претендует на С++..тогда выделяйте с помощью оператора new, а удаляйте оператором delete
Похожие вопросы
- Как сделать добавление удаление редактирование EF C#
- Поиск наибольшего отрицательного элемента массива (c++) и его удаление, написал программу, где то косячек =/
- Удаление повторяющихся элементов из массива С++
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- помогите пожалуйста сделать мне практическую по массивам, пожалуйста!!!
- Задачка на сортировку массивов
- Двумерный массив - Delphi
- Вопросы по информатике "Массив"
- Подскажите оператор для удаления элемента из массива. Для С++
- Что делаю не так? C++.Удаление элемента массива