zoukankan      html  css  js  c++  java
  • 扑克序列

    A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
    要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
    请填写出所有符合要求的排列中,字典序最小的那个。
    例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。

    请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。
     (15分)

     深搜

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    using namespace std;
    char s[9] = "AA223344",ans[9] = "443322AA",ant[9] = "AA223344";
    int p[5],q[5],visited[5];///每个牌有两张 p记录靠前位置的牌的位置,q记录同一种牌靠后位置的位置,visited记录每种牌访问程度 最多访问两次。
    int check()
    {
        if(q[1] - p[1] != 2)return 0;
        if(q[2] - p[2] != 3)return 0;
        if(q[3] - p[3] != 4)return 0;
        if(q[4] - p[4] != 5)return 0;
        return 1;
    }
    void dfs(int k)
    {
        if(k == 8)
        {
            if(check() && strcmp(ans,ant) > 0)strcpy(ans,ant);
            return;
        }
        for(int i = 1;i <= 4;i ++)
        {
            if(visited[i] != 2)
            {
                visited[i] ++;
                if(i == 1)ant[k] = 'A';
                else ant[k] = i + '0';
                if(visited[i] == 1)p[i] = k;
                else q[i] = k;
                dfs(k + 1);
                visited[i] --;
            }
        }
    }
    int main()
    {
        dfs(0);
        cout<<ans;
    }

     2019备战重做,一共四种卡片,每种两张,不分你我,两张卡片的距离时固定的,所以同时放两张牌。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #define inf 0x3f3f3f3f
    using namespace std;
    int d[4] = {3,4,5,2};
    bool vis[8];
    char ans[9] = "33221100";
    char t[9] = "00112233";
    void print(char *s) {
        for(int i = 0;i < 8;i ++)
            if(s[i] < '3') putchar(s[i] + 2);
            else putchar('A');
        putchar('
    ');
    }
    void dfs(int k) {
        if(k >= 4) {
            if(strcmp(t,ans) < 0) strcpy(ans,t);
            return;
        }
        for(int i = 0;i < 8;i ++) {
            if(vis[i] || i + d[k] >= 8 || vis[i + d[k]]) continue;
            vis[i] = true;
            vis[i + d[k]] = true;
            t[i] = t[i + d[k]] = '0' + k;
            dfs(k + 1);
            vis[i + d[k]] = false;
            vis[i] = false;
        }
    }
    int main() {
        dfs(0);
        print(ans);
    }
  • 相关阅读:
    ODBC接口规范
    JDBC与ODBC
    java中newInstance()和new()
    JDBC详解
    用JDBC连接 数据库 进行简单的增删改查
    JDBC接口规范
    JDBC中常用的接口
    java中的getStackTrace和printStackTrace的区别
    linux中的strings命令
    JAVA的容器---List,Map,Set (转)
  • 原文地址:https://www.cnblogs.com/8023spz/p/8377948.html
Copyright © 2011-2022 走看看