PAT 1042 Shuffling Machine

5233 단어 mac
#include <cstdio>

#include <cstdlib>

#include <vector>



using namespace std;



char tbl[5] = {'S', 'H', 'C', 'D', 'J'};



void shuffle(vector<char> &card, vector<char> &rnd) {

    int rlen= rnd.size();

    vector<char> tmp(card.size(), 0);

    for (int i=0; i<rlen; i++) {

        tmp[rnd[i]] = card[i];

    }

    card = tmp;

}



void print_card(char card) {

    printf("%c%d", tbl[card/13], card % 13 + 1);

} 



int main() {

    int times = 0, r = 0;

    vector<char> rnd(54, 0);

    vector<char> card(54, 0);

    for (int i=0; i<54; i++) {

        card[i] = i;

    }

    scanf("%d", &times);

    for (int i=0; i<54; i++) {

        scanf("%d", &r);

        rnd[i] = r - 1;

    }

    for (int i=0; i<times; i++) {

        shuffle(card, rnd);

    }

    print_card(card[0]);

    for (int i=1; i<54; i++) {

        printf(" ");

        print_card(card[i]);

    }

    return 0;

}

처음에 복잡 하 게 생각 했 습 니 다. 알고리즘 서론 에서 언급 한 것 처럼 요소 교환 을 해 야 한다 고 생각 했 습 니 다. 그곳 은 랜 덤 수열 이 일정한 범위 내 에서 유일 하 다 고 보장 할 수 없 기 때 문 입 니 다.그래서 배열 을 옮 겨 다 닐 때 발생 하 는 임 의 수가 얼마 인지 현재 요소 와 아래 표 시 를 현재 임 의 수 와 일치 하 는 요 소 를 바 꿉 니 다.하지만 수열 은 중복 되 지 않 는 다 고 했 으 니 원 소 를 대응 하 는 위치 에 놓 으 면 된다.물론 프로그램 에 서 는 한 번 의 shuffle 을 하나의 함수 로 쓰 지 않 아 도 됩 니 다. 그러면 반복 적 으로 vector 를 만 드 는 것 을 피 할 수 있 습 니 다. 임시 vector 를 사용 하면 요 소 를 복사 하 는 대신 swap 를 몇 번 더 실행 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기