作者:LAMP小白 点击:2101 发布日期:2012-10-21 22:26:00 返回列表
为神马不用PHP,因为你绞尽脑汁用C实现了,再用PHP写 你会发现:哇 真爽啊!!!哦也~~
需要做到的:
程序输入两个整数M和N,其中M
一种解决方案是初始化一个空的集合,在里面插入随机整数,直到个数足够
算法的伪代码是这样的:
initialize set S to empty size = 0 while size mio_lt; m do t = rand() %n if t is not is S insert T into S size++ print the elements of S in sorted order
然后例子尼玛是C++写的,苦逼死了!
于是自己写了个C版本的 PHP就更好实现了
#include mio_lt;stdio.hmio_gt; #include mio_lt;stdlib.hmio_gt; #include mio_lt;time.hmio_gt; void swap(int,int); void arrDisplay(void); int arr[9]; int main() { int count = 0; int m = 10; //arr size int n = 1000; //number limits int i = 0; int j = 0; int temp = 0; srand(time(NULL)); while(count mio_lt;= m){ temp = rand() % n; for(i = 0; i mio_lt; count; i++) if(temp == arr[i]) continue; ++count; arr[count - 1] = temp; } --count; for(i = 1; i mio_lt; count; i++) for(j = i; j mio_gt; 0 mio_amp;mio_amp; arr[j-1] mio_gt; arr[j]; j--) swap(j-1,j); arrDisplay(); return 0; } void swap(int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } void arrDisplay() { int i = 0; for(i; i mio_lt; 10; i++) printf("arr[%d]=%dn", i, arr[i]); }
方案2是生成一个包含整数0~n-1的数组,然后将数组的前M个元素与N范围内的随机元素交换位置,就得到了随机数
自己的C实现代码如下:
#include mio_lt;stdio.hmio_gt; #include mio_lt;stdlib.hmio_gt; #include mio_lt;time.hmio_gt; void swap(int,int); void arrDisplay(void); int arr[999]; int main() { int count = 0; int m = 10; //arr size int n = 1000; //number limits int i = 0; int j = 0; int temp = 0; srand(time(NULL)); //init arr count = --n; for(i; i mio_lt; count; i++) arr[i] = i; //rand for(i = 0; i mio_lt; m; i++) swap(i, rand() % 1000); //sort for(i = 1; i mio_lt; m; i++) for(j = i; j mio_gt; 0 mio_amp;mio_amp; arr[j-1] mio_gt; arr[j]; j--) swap(j-1,j); arrDisplay(); return 0; } void swap(int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } void arrDisplay() { int i = 0; for(i; i mio_lt; 10; i++) printf("arr[%d]=%dn", i, arr[i]); }
上一篇:关于rand()的一些事 下一篇:快递查询API