当前位置:编程学习 > C/C++ >>

给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里

 

 

[cpp]
//给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。   
 
#include <stdio.h>  
#include <stdlib.h>  
#include <time.h>  
 
#define CARDS_NUM 54  
 
//打印一副牌中的内容  
void printCards(int *cards) 

    int i=0; 
    int flag=0; 
    for(i=0;i<CARDS_NUM;i++) 
    { 
        if(flag==13) 
        { 
            printf("\n"); 
            flag=1; 
        } 
        else 
        { 
            flag++; 
        } 
        printf("%3d",*cards); 
        cards++; 
    } 
    printf("\n"); 

 
//创建一副1到54的牌,并存储在数组中  
int * createCards(int *cards) 

    int i=0; 
    for(i=0;i<CARDS_NUM;i++) 
    { 
        *(cards+i)=i+1; 
    } 
    return cards; 

 
 
//对数组中的两个元素交换,采用异或  
int * swap(int *cards,int i,int j) 

    if(i=j) 
    { 
        //do nothing  
    } 
    else 
    { 
        *(cards+i)=*(cards+i)^*(cards+j); 
        *(cards+j)=*(cards+j)^*(cards+i); 
        *(cards+i)=*(cards+i)^*(cards+j); 
    } 
    return cards; 

 
void main() 

    int i=0; 
    int p=0; 
    int cards[CARDS_NUM]={0}; 
 
    printf("一副牌有54张牌:1——13表示黑桃;14——26表示红桃;\n"); 
    printf("           27——39表示梅花;40——52表示方块;\n"); 
    printf("           51表示小王;52表示大王。\n\n"); 
 
    createCards(cards); 
    printf("原始有序牌为:\n"); 
    printCards(cards); 
 
    srand(time(0)); 
    for(i=0;i<CARDS_NUM;i++) 
    { 
        p=rand()%54; 
        swap(cards,p,i);        //每次随机找一个数依次和0到53中的元素交换  
    } 
    printf("\n随机洗牌后的结果是:\n"); 
    printCards(cards); 

//给出洗牌的一个算法,并将洗好的牌存储在一个整形数组里。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define CARDS_NUM 54

//打印一副牌中的内容
void printCards(int *cards)
{
 int i=0;
 int flag=0;
 for(i=0;i<CARDS_NUM;i++)
 {
  if(flag==13)
  {
   printf("\n");
   flag=1;
  }
  else
  {
   flag++;
  }
  printf("%3d",*cards);
  cards++;
 }
 printf("\n");
}

//创建一副1到54的牌,并存储在数组中
int * createCards(int *cards)
{
 int i=0;
 for(i=0;i<CARDS_NUM;i++)
 {
  *(cards+i)=i+1;
 }
 return cards;
}


//对数组中的两个元素交换,采用异或
int * swap(int *cards,int i,int j)
{
 if(i=j)
 {
  //do nothing
 }
 else
 {
  *(cards+i)=*(cards+i)^*(cards+j);
  *(cards+j)=*(cards+j)^*(cards+i);
  *(cards+i)=*(cards+i)^*(cards+j);
 }
 return cards;
}

void main()
{
 int i=0;
 int p=0;
 int cards[CARDS_NUM]={0};

 printf("一副牌有54张牌:1——13表示黑桃;14——26表示红桃;\n");
 printf("        27——39表示梅花;40——52表示方块;\n");
 printf("        51表示小王;52表示大王。\n\n");

 createCards(cards);
 printf("原始有序牌为:\n");
 printCards(cards);

 srand(time(0));
 for(i=0;i<CARDS_NUM;i++)
 {
  p=rand()%54;
  swap(cards,p,i);  //每次随机找一个数依次和0到53中的元素交换
 }
 printf("\n随机洗牌后的结果是:\n");
 printCards(cards);
}

 

 

 

\
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,