zoukankan      html  css  js  c++  java
  • UVA 10205 Stack 'em Up

    UVA_10205

        这个题目感觉就像是个模拟题,只不过读数据的时候比较蛋疼。

        我们可以始终记录每个位置上是那张牌,但这样的话每次移动的时候就必须借助一个临时数组,因为在移动的过程中我们要知道上一次各个位置的牌的情况。

        于是我们不如换个思路记录每张牌在哪个位置,这样我们每次移动的时候只需要知道每个牌所在位置变换到了哪个地方。

        最后再把每个牌所在的位置还原成每个位置有哪张牌即可。

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #define MAXN 110
    char b[500];
    int g[MAXN][60], p[60], ans[60];
    char value[][10] = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"};
    char suit[][10] = {"Clubs", "Diamonds", "Hearts", "Spades"};
    void init()
    {
    int i, j, k, ok = 0, n, num, t;
    gets(b);
    sscanf(b, "%d", &n);
    num = 1, k = 0;
    for(i = 1; i <= 52; i ++)
    p[i] = i;
    while(gets(b) != NULL)
    {
    if(b[0] == '\0')
    break;
    for(i = 0; b[i];)
    {
    if(!isdigit(b[i]))
    {
    i ++;
    continue;
    }
    sscanf(&b[i], "%d", &t);
    while(isdigit(b[i]))
    i ++;
    if(!ok)
    {
    k ++;
    g[num][t] = k;
    if(k == 52)
    {
    k = 0;
    num ++;
    if(num > n)
    ok = 1;
    }
    }
    else
    {
    for(j = 1; j <= 52; j ++)
    p[j] = g[t][p[j]];
    }
    }
    }
    }
    void printresult()
    {
    int i, v, s;
    for(i = 1; i <= 52; i ++)
    ans[p[i]] = i;
    for(i = 1; i <= 52; i ++)
    {
    v = (ans[i] - 1) % 13;
    s = (ans[i] - 1) / 13;
    printf("%s of %s\n", value[v], suit[s]);
    }
    }
    int main()
    {
    int t;
    gets(b);
    sscanf(b, "%d", &t);
    gets(b);
    while(t --)
    {
    init();
    printresult();
    if(t)
    printf("\n");
    }
    return 0;
    }


  • 相关阅读:
    老杳:2017年中国集成电路产业十大新闻
    RMA退货流程解决方案
    Linux
    vue.js
    NET Core度身定制的AOP框架
    Timeline
    HTTP
    MVC 常用扩展点:过滤器、模型绑定等
    装箱拆箱
    jQuery Tree
  • 原文地址:https://www.cnblogs.com/staginner/p/2293288.html
Copyright © 2011-2022 走看看