[面试算法]有一无符号整型数组,大小为10, 初始的数值随机,但在[0, 99]之间。请用C语言写一个过滤程序,令数组内的数据互不相等。

写了个算法实现,就想做个记录。以后有时间测试下正确性,以及是否有更好的思路。


//有一无符号整型数组,大小为10, 初始的数值随机,但在[0, 99]之间。请用C语言写一个过滤程序,令数组内的数据互不相等。
//	说明:
//	1.若数组内有相等的数据,可令某一数值加1或减1作出偏移,直至不等为止。
//	2.数组内的数据只能在[0, 99]之间。
//	3.数组第一次出现的数据保持不变,以后再次出现才进行相应的修改。


void GenNumber( unsigned int src[] , int num )
{
	unsigned int ALERT_FLAG = 100;//标志已经不是第一次出现了
	unsigned int arr[100];
	memset( arr, 0 , sizeof(arr) );


	for ( int n = 0; n < num; n++ )
	{
		arr[src[n]]++;			//标志已经出现过
	}
	for ( int n = 0; n < num; n++ )
	{
		if ( arr[src[n]] > 1 && arr[src[n]] != ALERT_FLAG )
		{
			arr[src[n]] = ALERT_FLAG;
			continue;
		}
		if ( arr[src[n]] == ALERT_FLAG )
		{
			unsigned int newValue = ++src[n];
			while( arr[newValue] && newValue <= 99 )
			{
				newValue = ++src[n];
			}
			if (src[n] > 99)
			{
				src[n] = 99;
				newValue = --src[n];
				while( arr[newValue] )
				{
					newValue = --src[n];
				}
			}


			arr[newValue]++;	
		}
	}
}


void main()
{
 	unsigned int arr[] = { 1, 3, 5, 3, 5, 3, 11 };
// 	unsigned int arr[] = { 1, 3, 5, 99, 99, 99, 11 };
//	unsigned int arr[] = { 98, 98, 98, 99, 99, 99, 11 };
	GenNumber(arr, sizeof(arr)/sizeof(*arr));


	system("puse");
}


[面试算法]有一无符号整型数组,大小为10, 初始的数值随机,但在[0, 99]之间。请用C语言写一个过滤程序,令数组内的数据互不相等。,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。