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
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- 2048
- RFC 2048
- zoj 2048
- hdu 2048
- C语言文件读写操作
- Unity 几种优化建议
- 什么是BSS段和c语言程序如何变成可执行的文件
- 欢迎使用CSDN-markdown编辑器
- Fragment
- 2048
- 【剑指offer】字符流中第一个不重复的字符
- 1009. 说反话 (20) PAT
- A.谍报分析
- 数据结构第五次实验——并查集、树在线评测
- 数据结构与算法分析 c++11 题3.1 由一个链表元素指定另一个链表对应位置的元素输出
- 剑指offer-57.二叉树的下一个结点
- 2016年湖南省省赛A题
- 内核自带按键驱动的添加与测试