|
|
请高人详细解释一下函数int select_next_av(int n) 的进行过程
书中讲的太少了,我看不明白。三个while 和三个i++r 已经把我搞迷了。还有一个return i,
全是i,上一个次在论坛上问到i,这次还是它。
- #include <iostream>
- #include <math.h>
- #include <stdlib.h>
- #include <time.h>
- using namespace std;
- void draw_a_card();
- int select_next_av(int n);
- int rand_0toN1(int n);
- char *suits[4]={"hearts","diamonds","spades", "clubs"};
- char *ranks[13]={"ace","two","three","four","five","six","seven",
- "eight","nine","ten","jack","queen","king"};
- int card_drawn[52];
- int cards_rema=52;
- int main(){
- int i,n;
- srand(time(0));
- while (1){
- cout<<"Enter no. of cards to drew (0 to exit):";
- cin>>n;
- if(n==0)
- break;
- for (i=1;i<=n; i++)
- draw_a_card();
- }
- return 0;
- }
- //以下定义函数void draw_a_card()
- void draw_a_card(){
- int r,s,n,card;
- n=rand_0toN1(cards_rema-- );
- card=select_next_av(n);
- r=card%13;
- s=card/13;
- cout<<ranks[r]<<" of "<<suits[s]<<endl;
- }
- //以下定义函数int select_next_av(int n)
- int select_next_av(int n){
- int i=0;
- while (card_drawn[i])
- i++;
- while (n-->0){
- i++;
- while (card_drawn[i])
- i++;
- }
- card_drawn[i]=true;
- return i;
- }
- //以下定义函数int rand_0toN1(int n)
- int rand_0toN1(int n){
- return rand()%n;
- }
复制代码 |
|