程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 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);
}

 

 

 

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved