码迷,mamicode.com
首页 > 系统相关 > 详细

PAT 1042 Shuffling Machine

时间:2014-11-02 22:21:00      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   使用   for   sp   div   

#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来代替元素拷贝。

PAT 1042 Shuffling Machine

标签:style   blog   io   color   ar   使用   for   sp   div   

原文地址:http://www.cnblogs.com/lailailai/p/4069923.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!