标签:brief containe 退出 i++ res contain number 输出 line
1
2
3
4
5
6
7
8
9
10
|
knuth( int n, int m) { srand((unsigned int )time( 0 )); for ( int i = 0 ; i < n; i++) { if ( ) { cout << i << endl; ( ); } } } |
rand()%(n-i)<=m m--
rand()%(n-i)<m m--
rand()%(n-i)>=m m++
rand()%(n-i)>m m++
为了方便解释假设n等于10,m等于5:
第一次rand()%(n-0)的余数范围是0~9,有可能小于m(=5),可以输出i=0;随后i++,m--
第二次rand()%(n-1)的余数范围是0~8,有可能小于m(=4),可以输出i=1;随后i++,m--
...
第五次rand()%(n-4)的余数范围是0~5,有可能小于m(=1),可以输出i=4;随后i++,m--得到i=5,m=0
第六次rand()%(n-5)的余数范围是0~4,不可能小于m(=0),算法结束。
倘若rand()%(n-i)<=m,则第六次还满足条件,意味着多输出的一次;
而rand()%(n-i)>=m,将会因为判断条件不满足而提早退出。因此选B
标签:brief containe 退出 i++ res contain number 输出 line
原文地址:http://www.cnblogs.com/wjr0526/p/7657328.html