整型数组处理算法(十三)请实现一个函数:凑14。[风林火山]

请实现一个函数:凑14;
输入很多个整数(1<=数值<=13),任意两个数相加等于14就可以从数组中删除这两个数, 
求剩余数(按由小到大排列);比如:输入数组[9,1,9,7,5,13], 输出数组[7,9] 。

实现代码如下:

 

int* MakeAndDelete(const int *InputArray, int count, int& OutPutCount, int MakeValue)
{
	int* Temp = new int[MakeValue];//保存1~13出现的次数
	
	int nOutCount = 0;//剩余元素个数
	
	int i;
	int j;
	int k;
	
	
	memset(Temp, 0, MakeValue*sizeof(int));
	
	//判断输入数字有效性,同时统计1~13出现的次数
	for (i=0; i<count; i++)
	{
		if (InputArray[i]>=MakeValue || InputArray[i]<1)
		{
			OutPutCount = -1;
			return NULL;//输入的数字不在1~13范围里
		}
		Temp[InputArray[i]]++;
	}
	
	//对个数进行计算:剩余个数或为0,或为差值,同时统计剩余元素个数
	for (i = 1; i < MakeValue / 2; i++) 
	{  
		if (Temp[i] > Temp[MakeValue - i]) 
		{  
			Temp[i] -= Temp[MakeValue - i];  
			Temp[MakeValue - i] = 0;
			
			nOutCount += Temp[i];
		} 
		else 
		{
			Temp[MakeValue - i] -= Temp[i];
			Temp[i] = 0;  
			
			nOutCount += Temp[MakeValue - i];
		}  
	}
	
	//如果是偶数,对2取余。
	if (MakeValue % 2 == 0) 
	{  
		Temp[MakeValue / 2] = Temp[MakeValue / 2] % 2;  
		nOutCount += Temp[MakeValue / 2];
	}
	
	//剩余数不为0
	if (nOutCount > 0)
	{
		k =0;
		OutPutCount = nOutCount;
		
		int* OutPutArray = new int[nOutCount];
		for (i= 1; i<MakeValue; i++)
		{
			if (Temp[i]>0)
			{
				for (j=0; j<Temp[i]; j++)
				{
					OutPutArray[k++] = i;
				}
			}
		}
		
		return OutPutArray;
	}
	
	OutPutCount = 0;
	return NULL;
		
}


有兴趣的朋友可以试试,仅提供参考。

 


转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12586389



 

posted on 2013-10-11 16:30  我的小人生  阅读(314)  评论(0编辑  收藏  举报