131 - The Psychic Poker Player

本文介绍了一种用于识别德州扑克牌型的算法实现。通过分析手牌和桌面上的牌,该算法能够准确判断出各种牌型,包括皇家同花顺、同花顺等。并提供了两种不同实现方式的源代码。
扑克牌型

下面列出从大到小的扑克牌面. 这是所有的扑克通用规则。

1
Royal Flush 同花大顺又称皇家同花顺
它是所有德州扑克中的王牌,即使您经常玩扑克,也很少见到这样的牌。好比打高尔夫球一杆进洞一样。它是由T(10)到Ace的清一色同花组成。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
2
Straight Flush 同花顺
除了由最大同花所组成的同花大顺以外的同花组成的顺子。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
3
Four-of-a-Kind 四条
四张同样的牌+任意一张牌 。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
4

Full House 俘虏或船牌或葫芦 
三条带一对,即三张同样的牌带两张同样的牌。如都是Full House,则先比较谁的三条大,如三条一样大,则比谁的两对大。如:

Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
5
Flush 五张同花
用五张同一花色但不相连的牌型组成,如都是五张同花,则谁的同花牌大谁赢。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
6
Straight 五张顺子
由五张相连但不同花色的牌组成,在连牌中,Ace是既可作最大也可以作最小的牌。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
7
Three-of-a-Kind 三条
即三张同样的牌。它有两种叫法,取决于一对牌是在您手中还是在桌上。一对在手中,桌上有一张,称之为“set”;v如手中有一张,桌上有一对,则称之为“Three of A Kind”。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
8
Two Pair 两对
由五张牌中的两对牌组成。如果都有两对,则先比大对,再比小对 。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
9
One Pair 一对
当不止一人有同样的一对牌时,则要比一对后面的牌,称之为“Kickers”。记住,德州扑克是挑选最好的五张牌去比。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player
   
10
High Card 大牌
无以上任何牌型时,决定牌的大小 。
Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player Uva <wbr> <wbr>131 <wbr>- <wbr>The <wbr>Psychic <wbr>Poker <wbr>Player

描述:这道题亏大了,差点哭死,怎么着也找不到问题所在,原来是少了一个冒号,
哭死啦……题意就是德州扑克牌,没什么特别的地方,还有就是只能先舍弃手中的牌,
才能抓牌,并且抓能抓取与舍弃的牌数相同的牌数,还有就是只能抓一次牌,
不管几张,只能一次。不过也学会了德州扑克牌的玩法,挺有意思的……

这道题写的代码太长了,并且耗时也多,所以就今天中午又重写了一次,
缩减了许多,具体看代码二

第一次代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
struct Card
{
    char num;
    char flower;
    int num_flag;
};
Card p[5],q[5];
char  str[]= {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
int flag,count,value[14];
void straight_flush(Card  *r,int x)
{
    if(flag) return;
    memset(value,0,sizeof(value));
    for(int j=0; j<13; j++)
        if(r[0].num==str[j])
        {
            value[j]=1;
            if(!j) value[13]=1;
            break;
        }
    for(int i=1; i<5; i++)
    {
        if(r[i-1].flower!=r[i].flower) break;
        for(int j=0; j<13; j++)
            if(r[i].num==str[j])
            {
                value[j]=1;
                if(!j) value[13]=1;
                break;
            }
    }
    int y(0);
    if(value[0])
    {
        for(int i=0; i<5; i++)
            if(value[i]) y++;
        if(y==5)
        {
            printf("straight-flush\n");
            flag=1;
            return;
        }
    }
    y=0;
    for(int i=1; i<14; i++)
    {
        if(value[i]) y++;
        if(y==5)
        {
            printf("straight-flush\n");
            flag=1;
            return;
        }
        if(y>=1&&!value[i]) break;
    }
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                straight_flush(m,x+1);
            }
}
void four_of_a_kind(Card *r,int x)
{
    if(flag) return;
    memset(value,0,sizeof(value));
    for(int i=0; i<5; i++)
        for(int j=0; j<13; j++)
            if(r[i].num==str[j])
            {
                value[j]++;
                break;
            }
    for(int i=0; i<14; i++)
        if(value[i]>=4)
        {
            printf("four-of-a-kind\n");
            flag=1;
            return;
        }
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                four_of_a_kind(m,x+1);
            }
}
void full_house(Card *r,int x)
{
    if(flag) return;
    memset(value,0,sizeof(value));
    for(int i=0; i<5; i++)
        for(int j=0; j<13; j++)
            if(r[i].num==str[j])
            {
                value[j]++;
                break;
            }
    int y(0),v(0);
    for(int i=0; i<14; i++)
        if(value[i]==3) y++;
        else if(value[i]==2) v++;
        else if(y&&v)
        {
            printf("full-house\n");
            flag=1;
            return;
        }
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                full_house(m,x+1);
            }
}
void flush(Card *r,int x)
{
    if(flag) return;
    for(int i=1; i<5; i++)
        if(r[i].flower!=r[i-1].flower) flag=1;
    if(!flag)
    {
        flag=1;
        printf("flush\n");
        return;
    }
    else flag=0;
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                flush(m,x+1);
            }
}
void straight(Card *r,int x)
{
    if(flag) return;
    int y;
    memset(value,0,sizeof(value));
    for(int i=0; i<5; i++)
        for(int j=0; j<13; j++)
            if(r[i].num==str[j])
            {
                value[j]=1;
                if(!j) value[13]=1;
                break;
            }
    if(value[0])
    {
        y=0;
        for(int i=0; i<5; i++)
            if(value[i]) y++;
        if(y==5)
        {
            printf("straight\n");
            flag=1;
            return;
        }
    }
    y=0;
    for(int i=1; i<14; i++)
    {
        if(value[i]) y++;
        if(y==5)
        {
            printf("straight\n");
            flag=1;
            return;
        }
        if(y>=1&&!value[i]) break;
    }
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                straight(m,x+1);
            }
}
void three_of_a_kind(Card *r,int x)
{
    if(flag) return;
    memset(value,0,sizeof(value));
    for(int i=0; i<5; i++)
        for(int j=0; j<13; j++)
            if(r[i].num==str[j])
            {
                value[j]++;
                break;
            }
    for(int i=0; i<14; i++)
        if(value[i]==3)
        {
            printf("three-of-a-kind\n");
            flag=1;
            return;
        }
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                three_of_a_kind(m,x+1);
            }
}
void two_pairs(Card *r,int x)
{
    if(flag) return;
    memset(value,0,sizeof(value));
    for(int i=0; i<5; i++)
        for(int j=0; j<13; j++)
            if(r[i].num==str[j])
            {
                value[j]++;
                break;
            }
    int y=0;
    for(int i=0; i<14; i++)
        if(value[i]==2)
        {
            y++;
            if(y!=2) continue;
            printf("two-pairs\n");
            flag=1;
            return;
        }
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                two_pairs(m,x+1);
            }
}
void one_pair(Card *r,int x)
{
    if(flag) return;
    memset(value,0,sizeof(value));
    for(int i=0; i<5; i++)
        for(int j=0; j<13; j++)
            if(r[i].num==str[j])
            {
                value[j]++;
                break;
            }
    for(int i=0; i<14; i++)
        if(value[i]==2)
        {
            printf("one-pair\n");
            flag=1;
            return;
        }
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                one_pair(m,x+1);
            }
}
int main()
{
    //freopen("a.txt","r",stdin);
    char c,s[100];
    count=0;
    while(scanf("%c",&c)!=EOF)
    {
        if(c=='\n'||count>9)
        {
            if(c!='\n') gets(s);
            count=count-5;
            printf("Hand: ");
            for(int i=0; i<5; i++) printf("%c%c ",p[i].num,p[i].flower);
            printf("Deck: ");
            for(int i=0; i<count; i++) printf("%c%c ",q[i].num,q[i].flower);
            if(c!='\n') printf("%s ",s);
            printf("Best hand: ");
            flag=0;
            straight_flush(p,0);
            if(!flag) four_of_a_kind(p,0);
            if(!flag) full_house(p,0);
            if(!flag) flush(p,0);
            if(!flag) straight(p,0);
            if(!flag) three_of_a_kind(p,0);
            if(!flag) two_pairs(p,0);
            if(!flag) one_pair(p,0);
            if(!flag) printf("highest-card\n");
            count=0;
        }
        else if(c!=' ')
        {
            Card k;
            k.num=c;
            scanf("%c",&c);
            k.flower=c;
            k.num_flag=0;
            if(count<=4) p[count]=k;
            else q[count-5]=k;
            count++;
        }
    }
    return 0;
}
第二次代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <string>
using namespace std;
struct Card
{
    char num;
    char flower;
    int num_flag;
};
Card p[5],q[5];
char  str[]= {'A','2','3','4','5','6','7','8','9','T','J','Q','K'};
string s_name[9]= {"straight-flush","four-of-a-kind","full-house","flush",
        "straight","three-of-a-kind","two-pairs","one-pair","highest-card"
                  };
int flag[15],count,value[15], solve_flag[10];
void solve(Card *r,int x)
{
    if(solve_flag[0]) return;
    int flag_flush(0);
    memset(value,0,sizeof(value));
    memset(flag,0,sizeof(flag));
    for(int j=0; j<13; j++)
        if(r[0].num==str[j])
        {
            flag[j]=1;
            if(!j) flag[13]=1;
            value[j]++;
            break;
        }
    for(int i=1; i<5; i++)
    {
        if(r[i-1].flower!=r[i].flower) flag_flush=1;
        for(int j=0; j<13; j++)
            if(r[i].num==str[j])
            {
                flag[j]=1;
                if(!j) flag[13]=1;
                value[j]++;
                break;
            }
    }
    if(!flag_flush) solve_flag[3]=1;
    int y(0),v(0);
    if(flag[0])
    {
        for(int i=0; i<5; i++)
            if(flag[i]) y++;
        if(y==5&&!flag_flush)
        {
            solve_flag[0]=1;
            return;
        }
        if(y==5&&flag_flush) solve_flag[4]=1;
    }
    y=0;
    for(int i=1; i<14; i++)
    {
        if(flag[i]) y++;
        if(y==5&&!flag_flush)
        {
            solve_flag[0]=1;
            return;
        }
        if(y==5&&flag_flush)
        {
            solve_flag[4]=1;
            break;
        }
        if(y>=1&&!flag[i]) break;
    }
    y=v=0;
    for(int i=0; i<14; i++)
        if(value[i]>=4) solve_flag[1]=1;
        else if(value[i]==3) v++;
        else if(value[i]==2) y++;
    if(v&&y==1) solve_flag[2]=1;
    if(v&&!y) solve_flag[5]=1;
    if(!v&&y==2) solve_flag[6]=1;
    if(!v&&y==1) solve_flag[7]=1;
    if(x<count)
        for(int i=0; i<5; i++)
            if(!r[i].num_flag)
            {
                Card m[5];
                for(int j=0; j<5; j++) m[j]=r[j];
                m[i]=q[x];
                m[i].num_flag=1;
                solve(m,x+1);
            }
}
int main()
{
    //freopen("a.txt","r",stdin);
    char c,s[100];
    count=0;
    while(scanf("%c",&c)!=EOF)
    {
        if(c=='\n'||count>9)
        {
            if(c!='\n') gets(s);
            count=count-5;
            printf("Hand: ");
            for(int i=0; i<5; i++) printf("%c%c ",p[i].num,p[i].flower);
            printf("Deck: ");
            for(int i=0; i<count; i++) printf("%c%c ",q[i].num,q[i].flower);
            if(c!='\n') printf("%s ",s);
            printf("Best hand: ");
            memset(solve_flag,0,sizeof(solve_flag));
            solve_flag[8]=1;
            solve(p,0);
            for(int i=0; i<9; i++)
                if(solve_flag[i])
                {
                    cout<<s_name[i]<<endl;
                    break;
                }
            count=0;
        }
        else if(c!=' ')
        {
            Card k;
            k.num=c;
            scanf("%c",&c);
            k.flower=c;
            k.num_flag=0;
            if(count<=4) p[count]=k;
            else q[count-5]=k;
            count++;
        }
    }
    return 0;
}


内容概要:本文提出了一种基于改进扩散模型的高海拔地区新能源高波动出力场景生成方法,并提供了完整的Python代码实现。该方法针对高海拔地区风能、光伏等新能源出力波动剧烈、不确定性高的特点,通过优化扩散模型的结构与训练策略,有效捕捉历史数据的概率分布特征与时序相关性,从而生成高质量、多样化的出力场景。文中详细阐述了模型的数学推导、网络架构设计、损失函数优化及采样算法改进,并通过实验证明其在拟合精度、场景多样性与稳定性方面优于传统生成模型,为电力系统在高比例新能源接入下的规划、调度与风险评估提供了可靠的场景输入支持。; 适合人群:具备一定Python编程能力和机器学习基础,从事新能源发电预测、电力系统分析、智能优化、场景生成等方向研究的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①用于高海拔地区风电、光伏出力的不确定性建模与多场景生成;②支撑含高渗透率新能源的电力系统随机优化调度、鲁棒决策与风险评估;③为相关学术研究、论文复现与算法改进提供可运行的技术方案与代码基础; 阅读建议:建议读者结合所提供的完整资源(代码、数据集、说明文档)进行实践操作,重点关注扩散模型的前向加噪与反向去噪过程的设计细节,以及如何将其适配于新能源时序数据的生成任务,通过参数调优与对比实验深入理解模型的生成机制与性能边界。
内容概要:本文围绕基于静态约束法的配电网电动汽车接入容量评估展开研究,提出了一种在新型电力系统背景下评估主动配电网对电动汽车承载能力的方法。研究通过构建数学模型,结合潮流计算与关键约束条件(如电压越限、线路过载等),量化分析配电网可承受的最大电动汽车充电负荷容量,旨在识别规模化电动汽车接入带来的潜在运行风险,并为电网规划与运行提供科学依据。文中配套提供了完整的Matlab代码实现,便于仿真验证与结果复现。此外,该研究与分布式光伏承载力评估、电动汽车可调能力分析等方向形成技术联动,展现了多主题协同的研究体系。; 适合人群:具备电力系统分析基础理论知识及Matlab编程能力的高校研究生、科研机构研究人员,以及从事新能源并网、智能配电网规划与运行等相关领域的工程技术人员。; 使用场景及目标:①用于学术研究中的模型复现与论文撰写支撑;②评估实际配电网中电动汽车大规模接入的可行性与安全边界,指导充电基础设施布局;③作为高校教学案例,帮助学生深入理解电网承载力评估的核心原理、建模方法与仿真技术; 阅读建议:建议结合文中提及的相关研究方向(如二阶锥规划、多面体聚合方法等)进行对比学习,充分利用所提供的Matlab代码与网盘资料开展仿真实验,重点关注约束条件的设定逻辑与潮流计算模块的实现细节,以深化对评估模型机理与工程应用价值的理解。
内容概要:本文围绕“考虑隐私保护的分布式联邦学习电力负荷预测研究”展开,提出了一种基于Python实现的联邦学习框架,旨在解决居民或行业电力负荷预测中用户电表数据隐私泄露的风险。该研究通过构建分布式机器学习模型,使各参与方在不共享原始数据的前提下协同训练全局模型,有效实现了数据“可用不可见”。文中详细阐述了联邦学习的整体架构设计、本地模型训练流程、参数加密传输与安全聚合机制,并结合差分隐私等技术进一步增强系统的隐私保护能力。同时,研究利用真实电力负荷数据集进行了实验验证,展示了方法在预测精度与隐私保障之间的良好平衡,并提供了完整的代码实例与复现指南,便于后续研究与应用拓展。; 适合人群:具备一定机器学习基础和电力系统背景知识,从事智慧能源、隐私计算或人工智能相关方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 实现跨区域、跨主体的电力负荷协同预测,打破数据孤岛;② 在确保用户用电数据隐私安全的前提下提升负荷预测准确性;③ 推动联邦学习在智能电网、需求响应、虚拟电厂等场景中的实际部署与应用。; 阅读建议:建议结合文中提供的Python代码与网盘资料进行动手实践,重点关注联邦学习的通信轮次设计、模型聚合算法(如FedAvg)的实现细节以及差分隐私噪声添加策略,深入理解其对模型性能与隐私强度的影响,为进一步优化与创新奠定基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值