[面试算法]有一无符号整型数组,大小为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个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值