Найти число и значения элементов массива, повторяющихся два раза - C (СИ)
Формулировка задачи:
1)дан массив целых чисел, найти число и значения элементов повторяющихся два раза
2)дан массив целых чисел,требуется сформировать новый массив содержащий элементы исходного массива,расположенных между первыми и вторыми элементами равных нулю
нужно написать код на си
пожалуйста объясните мне как это делается вообще
в каком порядке что писать
не понимаю массивы
Решение задачи: «Найти число и значения элементов массива, повторяющихся два раза»
textual
Листинг программы
#include <conio.h>
#include <iomanip>
#include <stdio.h>
void print(int* x,int n)
{
for(int j=0;j<n;j++)
printf("%i \t",*x++);
printf("\n");
}
int main()
{
int n,*m;
int x=-1,y=-1;
n=10;
int a[n];
for (int i=0;i<n;i++)
a[i]=rand()%10;
//a[9]=0;//умышленно сделать 9ый элемент нулевым
print (a,n);
for (int i=0;i<n;i++)
{
if(a[i]==0)
{
if(x==-1)
x=i;
else
y=i;
if (y!=-1)
break;
}
}
if(x==-1 || y==-1)
return -1;
printf("%i\t%i\n",x,y);
//если элементов между нулевыми элементами нет
if((y-x)==1)
return -1;
m=new int[y-x];
int *k=m;
for (int i=x+1;i<y;i++)
*k++=a[i];
//результирующий массив
print (m,y-x-1);
}
Объяснение кода листинга программы
Код выполняет следующие действия:
- Включает необходимые заголовочные файлы:
conio.hиспользуется для работы с консолью, в частности, с функциейgetch(), которая используется для получения ввода пользователя без вывода символа ввода.iomanip.hиспользуется для манипулирования выводом, в частности, для выравнивания вывода по левому краю.stdio.hиспользуется для ввода и вывода данных.
- Определяет функцию print(), которая принимает указатель на первый элемент массива и его размер в элементах. Функция выводит все элементы массива через табуляцию.
- Определяет функцию main(), которая является точкой входа в программу.
- Инициализирует переменные:
nинициализируется значением 10, что является размером массиваa.xиyинициализируются значениями -1, которые будут использоваться для отслеживания индексов первого и второго нулевых элементов в массиве.aинициализируется случайными значениями от 0 до 9.
- Создает массив a[], заполняет его случайными значениями от 0 до 9.
- Проверяет наличие нулевых элементов в массиве:
- Если встречается нулевой элемент, и это первый такой элемент, то его индекс сохраняется в
x. - Если уже был найден первый нулевой элемент и встречается второй, то его индекс сохраняется в
y. - Если
yне равно -1, значит второй нулевой элемент не найден, и цикл прерывается.
- Если встречается нулевой элемент, и это первый такой элемент, то его индекс сохраняется в
- Проверяет наличие нулевых элементов между первыми двумя нулевыми элементами:
- Если
xиyне равны -1, значит между ними есть хотя бы один элемент, и программа возвращает -1.
- Если
- Выводит индексы первых двух нулевых элементов.
- Проверяет наличие элементов между нулевыми элементами:
- Если
y-xравно 1, значит между нулевыми элементами нет других элементов, и программа возвращает -1.
- Если
- Выделяет память под массив, содержащий только повторяющиеся элементы:
mуказывает на начало нового массива.y-x-1определяет размер нового массива, который на единицу меньше, чем расстояние между нулевыми элементами, так как нулевой элемент уже есть вm.
- Копирует элементы из исходного массива в новый массив.
- Выводит новый массив.