카드 뒤 섞 기 알고리즘

문제: 카드 를 섞 는 알고리즘 을 제시 하고 씻 은 카드 를 성형 배열 에 저장 합 니 다.
분석: 54 장의 카드 는 각각 0 에서 53 의 수치 로 표시 하고 하나의 성형 배열 에 저장 되 며 배열 아래 표 시 는 카드 가 있 는 위 치 를 나타 낸다. 예 를 들 어 boke [0] 의 값 은 0 이다.이렇게 하면 최종 요소 가 어느 위치 로 바 뀌 었 는 지 알 수 있다. 예 를 들 어 최종 boke [3] 의 값 이 7 이면 7 번 요소 가 3 번 자리 로 바 뀌 었 는 지 알 수 있다.그 다음 에 전체 배열 을 옮 겨 다 니 며 옮 겨 다 니 는 과정 에서 랜 덤 수 를 만 들 고 이 랜 덤 수 를 아래 표 시 된 배열 요소 와 현재 옮 겨 다 니 는 배열 요 소 를 바 꿉 니 다.
코드 는 다음 과 같 습 니 다:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

void shuffle(int boke[])  //    
{  
  int i,r,t;  
  srand((unsigned)time(NULL)); 
//                   ,        ,           
  for(i=1; i<54; i++)  
    {  
      r=rand()%(54-i)+i;  
//           1 53,    2 53,      
  
      //    
      t=boke[i-1];  
      boke[i-1]=boke[r];  
      boke[r]=t;  
    }  
}  


int main(){
  int boke[54],i;  
  for(i=0;i<54;i++) //       
    boke[i]=i;  
  
  cout<<"before shuffle:"<<endl;  
  for(i=0; i<54; i++)    //    
     cout<<boke[i]<<" ";  
  cout<<endl;
  
  shuffle(boke);     //    
  
  
  cout<<"after shuffle:"<<endl;  
  for(i=0; i<54; i++)   //    
      cout<<boke[i]<<" ";  
  cout<<endl;
	system("pause");
    return 0;
}

좋은 웹페이지 즐겨찾기