LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 740|回复: 0

请高人详细解释一下函数int select_next_av(int n) 的进行过程

[复制链接]
发表于 2006-6-7 21:10:24 | 显示全部楼层 |阅读模式
请高人详细解释一下函数int select_next_av(int n) 的进行过程

书中讲的太少了,我看不明白。三个while 和三个i++r 已经把我搞迷了。还有一个return i,
全是i,上一个次在论坛上问到i,这次还是它。

  1. #include <iostream>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. using namespace std;
  6. void draw_a_card();
  7. int select_next_av(int n);   
  8. int rand_0toN1(int n);

  9. char  *suits[4]={"hearts","diamonds","spades", "clubs"};
  10. char  *ranks[13]={"ace","two","three","four","five","six","seven",
  11.                      "eight","nine","ten","jack","queen","king"};
  12. int card_drawn[52];     
  13. int cards_rema=52;   
  14. int main(){  
  15.    int i,n;
  16.    srand(time(0));
  17.    while (1){
  18.         cout<<"Enter no. of cards to drew (0 to exit):";
  19.         cin>>n;  
  20.         if(n==0)
  21.           break;
  22.          for (i=1;i<=n; i++)
  23.              draw_a_card();
  24.       }
  25.   return 0;
  26.   }
  27.     //以下定义函数void draw_a_card()
  28. void draw_a_card(){
  29.       int r,s,n,card;   
  30.       n=rand_0toN1(cards_rema-- );   
  31.       card=select_next_av(n);   
  32.       r=card%13;
  33.       s=card/13;
  34.       cout<<ranks[r]<<" of "<<suits[s]<<endl;
  35.   }
  36.      //以下定义函数int select_next_av(int n)
  37. int select_next_av(int n){
  38.      int i=0;
  39.      while (card_drawn[i])
  40.         i++;
  41.      while (n-->0){
  42.          i++;
  43.          while (card_drawn[i])
  44.            i++;
  45.        }
  46.       card_drawn[i]=true;
  47.       return i;
  48.   }
  49.     //以下定义函数int rand_0toN1(int n)
  50. int rand_0toN1(int n){
  51.      return rand()%n;
  52.   }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表