额,这是我的解法,似乎看起来很长……
我只给关键过程。输入输出自己去搞吧。
#include <stdlib.h>
unsigned int SortCount(unsigned int numElements,unsigned int *pArray)
{
unsigned int nCount,i,j;
nCount=0;
for (i=0;i<=numElements;i++)
{
for (j=i;j<=numElements;j++)
{
if(*(pArray+i)>*(pArray+j))
{
nCount++;
*(pArray+i)^=*(pArray+j)^=*(pArray+i)^=*(pArray+j);
}
}
}
return nCount;
}
int SortCountK(unsigned int numElements,unsigned int *pArray,unsigned int k)
{
unsigned int i,minCount,maxCount,*pArrayb,*pMinElement,*pElement;
int return_value=0;
pArrayb=(unsigned int *)(malloc(numElements*sizeof(unsigned int)));
for (i=0;i<numElements;i++) *(pArrayb+i)=*(pArray+i);
maxCount=SortCount(numElements,pArray);
minCount=0;
i=0;
do
{
pElement=pArray+i;
pMinElement=pElement;
while(pElement<(pArrayb+numElements))
{
if (*pMinElement>*pElement) pMinElement=pElement;
pElement++;
}
if (pMinElement!=pArray+i)
{
minCount++;
*pMinElement^=*pElement^=*pMinElement^=*pElement;
}
}while(i<=numElements);
if (k>=minCount && k<=maxCount) return_value=1;
return return_value;
}
unsigned int ArithmeticProgression(int numElements,int *pArray)
{
//结果在debug模式编译的程序是正确的,Release模式出错,不管了。
int min,max,i,j,subArrayCount,*pElement,Dvalue;
min=*pArray;
max=min;
i=1;
do
{
if(min>*(pArray+i)) min=*(pArray+i);
if(max<*(pArray+i)) max=*(pArray+i);
i++;
}while(i<numElements);
i=max-min;
max=i;
min=0-i;
subArrayCount=0;
for (i=0;i<numElements;i++)
{
pElement=pArray+i;
Dvalue=0;
for (j=1;pElement<(pArray+numElements);j++)
{
if((*pElement-*(pElement+j))>=min && (*pElement-*(pElement+j))<=max)
{
if (!Dvalue)
{
Dvalue=*pElement-*(pElement+j);
}
else
{
if ((*pElement-*(pElement+j))==Dvalue)
{
subArrayCount++;
pElement+=j;
j=0;
}
}
}
}
}
return subArrayCount;
}