M__________c
M__________c
2019-12-18 12:08
采纳率: 100%
浏览 602

望大家帮忙求解c++洗牌问题

编写一个函数,对二维数组的全部元素实现随机打乱其位置(洗牌)。函数原型为: void MatShuffle(intarr[],introw,intcol);

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • Yan__XiaoBai
    我是小白白白白白 2019-12-18 15:35
    已采纳

    https://blog.csdn.net/m0_38082783/article/details/79579116 这上面有

    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
    #define random(x) (rand()%x)
    
    void MatShuffle(int intarr[],int introw,int intcol) //intarr[]数组,introw数组长度,intcol洗牌次数。
    {
      int s1,s2,z1,z2,i;
      srand((int)time(0));
      for(i=0;i<intcol;i++)
      { 
        s1=random(introw);
        s2=random(introw); 
        z1=intarr[s1];
        z2=intarr[s2];
        intarr[s2]=z1;
        intarr[s1]=z2;
      }
      for(i=0;i<introw;i++)
      printf("%d ",intarr[i]);
    }
    
    
    void main()
    { int i;
      int intarr[8]={1,2,3,4,5,6,7,8};  //可以自己添加输入数组,然后改参数
      for(i=0;i<8;i++)
      printf("%d ",intarr[i]);
      printf("\n");
      MatShuffle(intarr,8,10);
    }
    
    
    点赞 2 评论
  • HanKin_
    一只三黄鸡 2019-12-18 13:21

    虽然我不知道C++,但是我可以给你思路,使用random函数random出数组中2个index的位置,然后将这2个位置的数据进行交换。使用循环进行多次,那么就是洗牌操作

    点赞 评论

相关推荐