28.12.2015, 01:22
общий
это ответ
Здравствуйте, fridge!
Комментариев не писал, если что непонятно, спрашивайте в мини=форуме.
Идея такая: считаем числа, которые попадают в интервал [1;N], если какого-то числа нет, то счетчик будет равен 0
[code h=200]
/*
Дан целочисленный массив размера N.
Если он является перестановкой, то есть содержит все числа от 1 до N,
то вывести 0; в противном случае вывести номер первого недопустимого элемента
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <malloc.h>
int main(int argc, char *argv[])
{
int N;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
printf("Введите число: ");
scanf("%d",&N);
if (N<=0)
{
printf("Были указаны неправильные значения\n");
system("pause");
return 0;
}
int *array = (int*)malloc(N*sizeof(int));
int *checker = (int*)calloc(N,sizeof(int));
int i;
//Заполнение массива случайными числами
for(i=0;i<N;i++)
{
array[i]=1 + rand()%10;
printf("%3d ", array[i]);
}
printf("\n");
for(i=0; i<N; i++)
{
if (array[i]<N+1)
checker[array[i]-1]++;
}
int iRet = 0;
for(i=0; i<N; i++)
{
if (checker[i] == 0)
{
iRet = i+1;
break;
}
}
if (iRet == 0)
printf("Найдены все числа\n");
else
printf("Ненайденное число = %d\n", iRet);
system("pause");
free(array);
free(checker);
return 0 ;
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен