• UVA 127 "Accordian" Patience (模拟)


            就把CSDN当成保存UVA做题代码的一个地方好了。。。 

    #include <stdio.h>
    #include <string.h>
    
    struct _r {
        char a[53][3];
        int x;
    }r[53]; // 定义好要用的数据结构
    
    // 移动处理函数
    void deal(int n, int s) {
    
        int left = r[n-s].x;
        int right = r[n].x;
        for (int i=0; i<3; i++) {
            r[n-s].a[left+1][i] = r[n].a[right][i];
        }
    
        r[n-s].x++;
        r[n].x--;
    
        if (r[n].x >= 0)
            return;
    
        for (int i=n; i<52; i++)
            r[i] = r[i+1];
    }
    
    int main() {
    
        while (1) {
            scanf("%s", r[0].a[0]);
            if ('#' == r[0].a[0][0])
                break;
            r[0].x = 0;
            r[52].x = -1;
            for (int i=1; i<52; i++) {
                scanf("%s", r[i].a[0]);
                r[i].x = 0;
            }
    
            bool flag = true;
            int nCount = 0;
            while (flag) {
                int i;
                for (i=1; r[i].x!=-1; i++) {
                    int left = r[i-3].x;
                    int right = r[i].x;
                    if (i>0 && (r[i].a[right][0]==r[i-3].a[left][0]
                        || r[i].a[right][1]==r[i-3].a[left][1])) {
    
                        deal(i, 3);
                        flag = false;
                        break;
                    }
                    left = r[i-1].x;
                    right = r[i].x;
                    if (r[i].a[right][0]==r[i-1].a[left][0]
                        || r[i].a[right][1]==r[i-1].a[left][1]) {
    
                        deal(i, 1);
                        flag = false;
                        break;
                    }
                }
                nCount = i;
                // 判断有没有交换,如果没有的话就跳出while()函数
                if (true == flag)
                    flag = false;
                else
                    flag = true;
            }
            if (nCount > 1)
                printf("%d piles remaining:", nCount);
            else
                printf("%d pile remaining:", nCount);
            for (int i=0; r[i].x != -1; i++)
                printf(" %d", r[i].x+1);
            puts("");
        }
    
        return 0;
    }
    

  • 相关阅读:
    弹出层
    jQuerySelectors(选择器)的使用(三、简单篇)
    jQuerySelectors(选择器)的使用(二、层次篇)
    jQuerySelectors(选择器)的使用(四五、内容篇&可见性篇)
    对frameset、frame、iframe的js操作
    文件上传
    C# 字符串操作
    图片防盗链之HttpHandler方法实现
    MSSQL 存储过程
    dataset操作
  • 原文地址:https://www.cnblogs.com/zcube/p/4194537.html
Copyright © 2020-2023  润新知