黑马程序员技术交流社区

标题: C语言洗牌问题,怎么实现,求大神 [打印本页]

作者: 枫叶路过123    时间: 2014-11-5 00:49
标题: C语言洗牌问题,怎么实现,求大神
22、洗扑克牌。将54张牌分别编号为1,2,…,54号,并放在数组M中。洗牌方法如下:产生[1,54]区间内的一个随机数K,将M[1]与M[K]交换;然后产生[2,54]之间的随机整数K,让M[2]与M[K]交换;…,直到剩下最后一张牌为止。请编写实现上述洗牌的程序。
作者: doudou33420    时间: 2014-11-5 15:20
本帖最后由 doudou33420 于 2014-11-5 15:24 编辑

随便写的 看看是你要的结果么
  1. //
  2. //  main.m
  3. //  sad asd2
  4. //
  5. //  Created by PG on 14/11/4.
  6. //  Copyright (c) 2014年 PG. All rights reserved.
  7. //洗扑克牌。将54张牌分别编号为1,2,…,54号,并放在数组M中。洗牌方法如下:产生[1,54]区间内的一个随机数K,将M[1]与M[K]交换;然后产生[2,54]之间的随机整数K,让M[2]与M[K]交换;…,直到剩下最后一张牌为止。请编写实现上述洗牌的程序。

  8. #import <Foundation/Foundation.h>

  9. int main(int argc, const char * argv[]) {

  10.     @autoreleasepool {
  11.         int poker[54];
  12.         //将54张牌分别编号为1,2,…,54号,并放在数组M中
  13.         for (int i = 0 ; i < 54; i ++) {
  14.             poker[i] = i+1;
  15.         }
  16.         
  17.         for (int i = 0; i <54; i ++) {
  18.             //产生[i,54]区间内的一个随机数K
  19.             int randomK = (arc4random() % (54 -i))+i ;
  20.             printf("产生了%d,54之间随机数%d poker[\%d] 的值是%d\n",i,randomK,randomK,poker[randomK]);
  21.             
  22.             printf("poker[\%d]的值是%d, 开始与poker[\%d]换位置了\n",i,poker[i],randomK);
  23.             // 将M[1]与M[K]交换
  24.             int temp = poker[i];
  25.             poker[i] = poker[randomK];
  26.             poker[randomK] = temp;
  27.             
  28.   
  29.             for (int i = 0; i <54; i ++) {
  30.                 printf("%d\t",poker[i]);
  31.             }
  32.             printf("\n");

  33.         }

  34.     }
  35.    
  36.     return 0;
  37. }
复制代码



屏幕快照 2014-11-05 下午3.18.49.png (60.33 KB, 下载次数: 28)

屏幕快照 2014-11-05 下午3.18.49.png

屏幕快照 2014-11-05 下午3.19.44.png (166.7 KB, 下载次数: 28)

屏幕快照 2014-11-05 下午3.19.44.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2