[面试算法]有一无符号整型数组,大小为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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。