MY Solution:
I first sort the array and then check if their r any adjacent elements r repeated.
#include"stdio.h"
#include"stdlib.h"
#define MAX_NUMBERS 10
void MyQuickSort(int iLow, int iHigh, int aNumbers[]);
int MySortDivision(int iLow, int iHigh, int aNumbers[]);
int MyDupCount(int aNumbers[]);
int main()
{
int iCount = 0,iSumActual = 0,iSumUser = 0;
int aNumber[MAX_NUMBERS];
int iDupCount = 0;
for(iCount = 0; iCount < MAX_NUMBERS; iCount++)
scanf("%d",&aNumber[iCount]);
MyQuickSort(0, MAX_NUMBERS-1, aNumber);
iDupCount = MyDupCount(aNumber);
printf("Total Number of Duplicates: %d", iDupCount);
return 0;
}
int MyDupCount(int aNumbers[])
{
int iArrayLen = 0;
int iDupCount = 0;
int iRepetiveCount;
while(iArrayLen < MAX_NUMBERS)
{
if(aNumbers[iArrayLen] == aNumbers[iArrayLen + 1])
{
iDupCount++;
iRepetiveCount =iArrayLen+1;
while(aNumbers[iRepetiveCount++] == aNumbers[iArrayLen]);
}
iArrayLen++;
}
return iDupCount++;
}
void MyQuickSort(int iLow, int iHigh, int aNumbers[])
{
int iPivotElementIndex = 0;
if(iLow < iHigh)
{
iPivotElementIndex = MySortDivision(iLow, iHigh, aNumbers);
MyQuickSort(iLow, iPivotElementIndex - 1 ,aNumbers);
MyQuickSort(iPivotElementIndex + 1, iHigh, aNumbers);
}
return;
}
int MySortDivision(int iLow, int iHigh, int aNumbers[])
{
int iInternalLow = iLow;
int iInternalHigh = iHigh;
int iPivot = aNumbers[iLow];
int iLowValue,iHighValue;
while(iInternalLow < iInternalHigh)
{
iHighValue = aNumbers[iInternalHigh];
while(iPivot <= iHighValue)
{
if(iInternalHigh <= iInternalLow)
break;
iInternalHigh--;
iHighValue = aNumbers[iInternalHigh];
}
aNumbers[iInternalLow] = iHighValue;
iLowValue = aNumbers[iInternalLow];
while(iPivot > iLowValue)
{
if(iInternalLow >= iInternalHigh)
break;
iInternalLow++;
iLowValue = aNumbers[iInternalLow];
}
aNumbers[iInternalHigh] = iLowValue;
}
aNumbers[iInternalLow] = iPivot;
return iInternalLow;
}
No comments:
Post a Comment