2048

来源:互联网 发布:明星互动软件 编辑:程序博客网 时间:2024/05/23 23:26

嗯,一道有趣的考试题
输入0,1 ,2,3(上,下,左,右)
kk:kk%剩下的空格子就是下一步出现数字的位置;
v:下一步出现的数字(2或4)PS:改成随机数也是可以滴~

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;int n,m,x1,x2,y1,y2,ans,ret,v,d,kk,v1,v2,ans2,pp=-1,t;int p[10][10];int b[10][10];bool pd;void ss(int ret,int v){    int tot=0;    for(int j=1;j<=n;j++)        for(int k=1;k<=n;k++)        {            if(p[j][k]==0)tot++;            if(tot==ret)            {                p[j][k]=v;                return;            }        }}int move0(){    memset(b,0,sizeof(b));    pd=0;    for(int i=1;i<=n;i++)    {        t=0;        for(int j=1;j<=n;j++)        {            if(p[i][j])            b[++t][j]=p[i][j];        }    }    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)        {            if(p[i][j]!=b[i][j])pd=1;            p[i][j]=b[i][j];        }    return pd;  } int move1(){    memset(b,0,sizeof(b));    pd=0;    for(int i=n;i>=1;i--)    {        t=0;        for(int j=1;j<=n;j++)        {            if(p[i][j])            b[++t][j]=p[i][j];        }    }    for(int i=n;i>=1;i--)        for(int j=1;j<=n;j++)        {            if(p[i][j]!=b[i][j])pd=1;            p[i][j]=b[i][j];        }    return pd;}int move2(){    memset(b,0,sizeof(b));    pd=0;    for(int i=1;i<=n;i++)    {        t=0;        for(int j=1;j<=n;j++)        {            if(p[i][j])            b[i][++t]=p[i][j];        }    }    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)        {            if(p[i][j]!=b[i][j])pd=1;            p[i][j]=b[i][j];        }    return pd;  }int move3(){    memset(b,0,sizeof(b));    pd=0;    for(int i=1;i<=n;i++)    {        t=0;        for(int j=n;j>=1;j--)        {            if(p[i][j])            b[i][++t]=p[i][j];        }    }    for(int i=1;i<=n;i++)        for(int j=n;j>=1;j--)        {            if(p[i][j]!=b[i][j])pd=1;            p[i][j]=b[i][j];        }    return pd;  }void add0(){    int kk=move0();        for(int k=1;k<=n;k++)                for(int j=1;j<=n;j++)                {                    if(p[j-1][k]==p[j][k]&&p[j][k]!=0)                    {                        p[j-1][k]+=p[j][k];                        ans+=p[j-1][k];                        p[j][k]=0;                        kk++;                    }                }    if(kk==0)printf("%d\n%d",pp,ans);    move0();}void add1(){    int kk=move1();    for(int k=1;k<=n;k++)        for(int j=n-1;j>=1;j--)        {            if(p[j][k]==p[j+1][k]&&p[j][k]!=0)            {                p[j+1][k]+=p[j][k];                ans+=p[j+1][k];                p[j][k]=0;                kk++;            }        }    if(kk==0)printf("%d\n%d",pp,ans);    move1();}void add3(){    int kk=move3();    for(int j=1;j<=n;j++)        for(int k=n-1;k>=1;k--)            {                if(p[j][k+1]==p[j][k]&&p[j][k]!=0)                {                        p[j][k+1]+=p[j][k];                         ans+=p[j][k+1];                        kk++;                        p[j][k]=0;                }            }    if(kk==0)printf("%d\n%d",pp,ans);    move3();}void add2(){    int kk=move2();    for(int j=1;j<=n;j++)        for(int k=2;k<=n;k++)        {            if(p[j][k]==p[j][k-1]&&p[j][k]!=0)            {                p[j][k-1]+=p[j][k];                ans+=p[j][k-1];                p[j][k]=0;                kk++;            }        }    if(kk==0)printf("%d\n%d",pp,ans);    move2();}int main(){//  freopen("game.in","r",stdin);//  freopen("game.out","w",stdout);    scanf("%d%d",&n,&m);    scanf("%d%d%d%d%d%d",&x1,&y1,&v1,&x2,&y2,&v2);    p[x1][y1]=v1;    p[x2][y2]=v2;    for(int i=1;i<=m;i++)    {        pp++;        scanf("%d%d%d",&d,&kk,&v);        ans2=0,ret=0;        if(d==0)        {            add0();            for(int j=1;j<=n;j++)                for(int k=1;k<=n;k++)                {                    if(p[j][k]==0)ret++;                }            if(ret==0)            {                printf("%d\n%d",pp,ans);                return 0;            }            ret=1+kk%ret;            ss(ret,v);        }        if(d==1)        {            add1();            for(int j=1;j<=n;j++)                for(int k=1;k<=n;k++)                {                    if(p[j][k]==0)ret++;                }            if(ret==0)            {            printf("%d\n%d",pp,ans);                return 0;            }            ret=1+kk%ret;            ss(ret,v);        }        if(d==3)        {            add3();            for(int j=1;j<=n;j++)                for(int k=1;k<=n;k++)                {                    if(p[j][k]==0)ret++;                }            if(ret==0)            {            printf("%d\n%d",pp,ans);                return 0;            }            ret=1+kk%ret;            ss(ret,v);        }        if(d==2)        {               add2();            for(int j=1;j<=n;j++)                for(int k=1;k<=n;k++)                {                    if(p[j][k]==0)ret++;                }            if(ret==0)            {            printf("%d\n%d",pp,ans);                return 0;            }            ret=1+kk%ret;            ss(ret,v);        }        for(int u=1;u<=n;u++)        {            for(int h=1;h<=n;h++)            printf("%d ",p[u][h]);            printf("\n");        }           printf("\n");    }printf("%d\n%d",pp,ans);    return 0;}
0 0
原创粉丝点击