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

来源:互联网 发布:电脑版淘宝客服打不开 编辑:程序博客网 时间:2024/05/19 05:38

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


//有一无符号整型数组,大小为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");}


0 0
原创粉丝点击