Написать функцию:
int arrayUnique(int array[], int size), которая будет удалять из массива дубликаты элементов, и в конце работы вернёт новую длину массива.Предлагаю для решения этой задачи организовать заполнение массива случайными числами. Это сократит время на ввод элементов двумерного массива. Результат работы программы показан ниже:
// new_line_array.cpp: определяет точку входа для консольного приложения.
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
int arrayUnique(int *ar, int);
int main(int argc, char* argv[])
{
srand(time(NULL));
const int array_size = 20; // размер массива
const int interval = 10; // масштаб генерируемых случайных чисел
int ar[array_size];
for (int counter1 = 0; counter1 < array_size; counter1++)
{
ar[counter1] = rand() % interval; // заполняем массив случайными числами
cout << ar[counter1] << " "; // печать элементов массива
}
cout << "\n";
for (int counter1 = 0; counter1 < arrayUnique(ar, array_size)/*вызов функции отбора значений*/; counter1++)
{
cout << ar[counter1] << " "; // печать элементов массива
}
cout << endl;
system("pause");
return 0;
}
int arrayUnique(int *ar, int size) // функция, определяющая элементы массива в единственном экземпляре
{
for (int counter1 = 0; counter1 < size; counter1++)
{
for (int counter2 = counter1 + 1; counter2 < size ; counter2++)
{
if ( ar[counter1] == ar[counter2] ) // если найден одинаковый элемент
{
for (int counter_shift = counter2; counter_shift < size -1; counter_shift++)
{
// выполнить сдвиг всех остальных элементов массива на -1, начиная со следующего элемента, после найденного дубля
ar[counter_shift] = ar[counter_shift + 1];
}
size -= 1; // уменьшить размер массива на 1
if (ar[counter1] == ar[counter2]) // если следующий элемент - дубль
{
counter2--; // выполнить переход на предыдущий элемент
}
}
}
}
return size;
}
CppStudio.com
8 2 4 0 6 8 9 3 7 9 7 4 9 9 3 5 1 2 2 9 8 2 4 0 6 9 3 7 5 1
Комментарии
art_h4rd
void arr_uniq(int * mas, int & size) { for (auto i = 0; i < size; i++) { for (auto j = 0; j < size; j++) { if(i != j) { if (mas[i] == mas[j]) { swap(mas[size - 1], mas[j]); size--; } } } } }iYasha
#include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; void printVector(const vector<int>& a) { cout << endl; for (auto i : a) { cout << i << ' '; } cout << "\nsize a == " << a.size() << endl; cout << endl; } int main() { vector<int> nums; vector<int> end_nums; bool nums_0 = true, nums_1 = true, nums_2 = true, nums_3 = true, nums_4 = true, nums_5 = true; bool nums_6 = true, nums_7 = true, nums_8 = true, nums_9 = true; for (int i = 0; i < 10; i++) { nums.push_back((rand() % 9)/2); } printVector(nums); for (int i = 0; i < nums.size(); i++){ if (nums[i] == 0 && nums_0 == true) { end_nums.push_back(0); nums_0 = false; } if (nums[i] == 1 && nums_1 == true) { end_nums.push_back(1); nums_1 = false; } if (nums[i] == 2 && nums_2 == true) { end_nums.push_back(2); nums_2 = false; } if (nums[i] == 3 && nums_3 == true) { end_nums.push_back(3); nums_3 = false; } if (nums[i] == 4 && nums_4 == true) { end_nums.push_back(4); nums_4 = false; } if (nums[i] == 5 && nums_5 == true) { end_nums.push_back(5); nums_5 = false; } if (nums[i] == 6 && nums_6 == true) { end_nums.push_back(6); nums_6 = false; } if (nums[i] == 7 && nums_7 == true) { end_nums.push_back(7); nums_7 = false; } if (nums[i] == 8 && nums_8 == true) { end_nums.push_back(4); nums_8 = false; } if (nums[i] == 9 && nums_9 == true) { end_nums.push_back(9); nums_9 = false; } } printVector(end_nums); return 0; }Максим Квачёв
/* * Created by IrishSilvan at 06.08.2016 * This program delete repeating elements from random matrix */ #include <iostream> #include <iomanip> #include <windows.h> using namespace std; //Прототипы функций void random_massive(int, int, int); int random_number(int, int); void print_massive(int); int find_repeat(int*, int); int massive[20]; //Матрица 10x1 int main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); cout << fixed; // Отображение чисел в ненаучной форме cout << setprecision(0); //Устанавливаем точность для всех выводимых чисел srand((unsigned int) time(NULL)); //Для полной рандомизации генерируемых чисел int n0, n1; //Переменные диапазона чисел int size0 = 0; cout << "Введите размер матрицы: "; cin >> size0; if(size0 <= 0){ cout << "Вы ввели недопустимый размер матрицы" << endl; system("pause"); return 0; } cout << "Введите диапазон генерируемых чисел" << endl; cout << "Укажите нижний предел: "; cin >> n0; cout << "Укажите верхний предел: "; cin >> n1; if(n0 == n1){ cout << "Вы задали одинаковые диапазоны" << endl; system("pause"); return 0; } random_massive(n0,n1, size0); //Вызов функции генерации массива по заданным параметрам cout << "Матрица:" << endl; print_massive(size0); //Вызов функции вывода готового массива на экран cout << endl; int size1 = find_repeat(massive, 20); print_massive(size1); cin >> n0; return 0; } //Функция - Генератор массива со случайными числами void random_massive(int a, int b, int size) { for(int i = 0; i < size; i++) { //Перебираем элементы в строке по индексам до 10го massive[i] = random_number(a, b); //Запись в массив случайного числа } } //Функция - Генератор случайных чисел int random_number(int N0, int N1) { int spray = N1 - N0; //Вычисление диапазона допустимых чисел int number = (N0 + (rand() % spray)); //Складываем все вместе и получаем случайное число в заданном диапазоне return number; //Возвращаем случайное число с дробной частью } //Функция - Вывод массива на экран в удобной для чтения форме void print_massive(int size) { for(int i = 0; i < size; i++) { //Перебираем элементы в строке по индексам до 10го cout << massive[i] << " "; //Выводим каждый элемент отдельно пользователю. 3 знака после запятой } } //Функция - Отсеивание повторяющихся элементов массива int find_repeat(int *matrix, int size) { bool var; int temp_massive[size]; int index = 0; for(int i = 0; i < size; i++) { int temp_el = matrix[i]; var = true; for(int s = 0; (s < size) && var; s++) { if(temp_el == temp_massive[s]) var = false; else if(s == size-1) { temp_massive[index] = matrix[i]; index++; } } } for(int i = 0; i < index; i++) { massive[i] = temp_massive[i]; } return index; }Arthur
#include<iostream> #include<ctime> #include<algorithm> #include<iterator> using namespace std; const int SZ = 20; int main() { int mas[SZ]; int i = 0; srand(time(0)); for(int x = 0; x<SZ; x++) mas[x] =rand()%10+1; copy(mas, mas + SZ, ostream_iterator<int>(cout," ")); cout<<endl; for(int x = 0; x<SZ; x++) if( 0 == count(mas, mas+i, mas[x]) ) mas[i++] = mas[x]; copy(mas, mas + i, ostream_iterator<int>(cout," ")); return 0; }Arthur
#include<iostream> #include<ctime> #include <Windows.h> #include<algorithm> using namespace std; const int SZ = 20; int main() { int mas[SZ]; srand(time(0)); for(int x = 0; x<SZ; x++) { mas[x] =rand()%10+1; cout<<mas[x]<<" "; } cout<<endl; int i = 0; for(int x = 0; x<SZ; x++) if( 0 == count(mas, mas+i, mas[x]) ) mas[i++] = mas[x]; for(int x = 0; x<i; x++) cout<<mas[x]<<" "; return 0; }Arthur
Функция удаляет все повторяющиеся элементы
#include<iostream> #include <Windows.h> #include <ctime> using namespace std; const int SZ = 20; int arrayUnique(int* , const int ); int main() { int mass[SZ]; srand(time(0)); for(int x = 0; x<SZ; x++) { mass[x] = rand()%10 + 1; cout<<mass[x]<<" "; } cout<<endl; int newsize = arrayUnique( mass, SZ); for(int x = 0; x<newsize; x++) cout<<mass[x]<<" "; return 0; } int arrayUnique(int* mass, const int SZ) { int x = 0; int newmass[SZ]; int n = 0; for(x = 0; x<SZ; x++) { bool ch = true; for(int y = x+1; y<SZ&&ch; y++) if(mass[x] == mass[y]) ch = false; for(int i = 0; i<x && ch; i++) if(mass[i] == mass[x]) ch = false; if(ch) newmass[n++] = mass[x]; } for(int i = 0; i<n; i++) mass[i] = newmass[i]; return n; }