题目描述

此时,Conan却在一旁玩着2048。
这是一个4*4的矩阵,初始全为0。每次一个没有数字的格子中会随机出现一个2或4,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,相同数字的方块在靠拢、相撞时会相加。
Conan想看看今天自己运气咋样,于是就闭着眼睛,在屏幕上随便滑来滑去。所以这个模拟的任务就交给你了。过了一会,他然后睁开眼睛,如果游戏没有结束(滑动后如果没有空格子,则游戏结束),请输出矩阵(格式参见样例),否则输出“Game over!”(不包含引号)。

输入
输入第一行包含一个整数N,表示Conan滑了几下。
接下来N 行,x, y, v, f表示第x行与第y列出现数字为v后,Conan滑的方向为f(f为字符,U, D, L, R分别表示向上下左右滑)。
行从上往下1-4标号,列从左往右1-4标号。
数据保证在游戏未结束时,只会在空白区域出现数字。

输出
输出按题目描述。

输入样例
8
1 3 4 L
2 3 2 U
2 4 2 R
4 1 2 L
3 4 2 L
3 2 2 D
1 3 4 R
1 3 2 U

输出样例
0 0 2 8
0 0 0 2
0 0 0 8
0 0 0 0

说明
【数据规模与约定】 对于100%的数据满足。
.
.
.
.
.
分析
若4 4 8 4向左撞的话,得8 8 4 0
每做完一次滑动就判断是否能进行下一次滑动,最后一次不判断
.
.
.
.
.
程序:

#include<iostream>
#include<cstdio>
using namespace std;
int a[10][10],b[10][10];
bool nc[10],bz;void work1()
{for (int i=1;i<=4;i++){int k=0;for (int j=1;j<=4;j++)if (a[i][j]!=0){k++;a[i][k]=a[i][j];if (k!=j) a[i][j]=0;}}for (int i=1;i<=4;i++)for (int j=1;j<=3;j++)if (a[i][j]==a[i][j+1]&&a[i][j]!=0){a[i][j]+=a[i][j+1];a[i][j+1]=0;}for (int i=1;i<=4;i++){int k=0;for (int j=1;j<=4;j++)if (a[i][j]!=0){k++;a[i][k]=a[i][j];if (k!=j) a[i][j]=0;}}
}void work2()
{for (int i=1;i<=4;i++){int k=5;for (int j=4;j>=1;j--)if (a[i][j]!=0){k--;a[i][k]=a[i][j];if (k!=j) a[i][j]=0;}}for (int i=1;i<=4;i++)for (int j=4;j>=2;j--)if (a[i][j]==a[i][j-1]&&a[i][j]!=0){a[i][j]+=a[i][j-1];a[i][j-1]=0;}for (int i=1;i<=4;i++){int k=5;for (int j=4;j>=1;j--)if (a[i][j]!=0){k--;a[i][k]=a[i][j];if (k!=j) a[i][j]=0;}}
}void work3()
{for (int i=1;i<=4;i++){int k=0;for (int j=1;j<=4;j++)if (a[j][i]!=0){k++;a[k][i]=a[j][i];if (k!=j) a[j][i]=0;}}for (int i=1;i<=4;i++)for (int j=1;j<=3;j++)if (a[j][i]==a[j+1][i]&&a[j][i]!=0){a[j][i]+=a[j+1][i];a[j+1][i]=0;}for (int i=1;i<=4;i++){int k=0;for (int j=1;j<=4;j++)if (a[j][i]!=0){k++;a[k][i]=a[j][i];if (k!=j) a[j][i]=0;}}
}void work4()
{for (int i=1;i<=4;i++){int k=5;for (int j=4;j>=1;j--)if (a[j][i]!=0){k--;a[k][i]=a[j][i];if (k!=j) a[j][i]=0;}}for (int i=1;i<=4;i++)for (int j=4;j>=2;j--)if (a[j][i]==a[j-1][i]&&a[j][i]!=0){a[j][i]+=a[j-1][i];a[j-1][i]=0;}for (int i=1;i<=4;i++){int k=5;for (int j=4;j>=1;j--)if (a[j][i]!=0){k--;a[k][i]=a[j][i];if (k!=j) a[j][i]=0;}}
}void fz1()
{for (int i=1;i<=4;i++)for (int j=1;j<=4;j++)b[i][j]=a[i][j];return;
}void fz2()
{for (int i=1;i<=4;i++)for (int j=1;j<=4;j++)a[i][j]=b[i][j];return;
}bool check()
{for (int i=1;i<=4;i++)for (int j=1;j<=4;j++)if (a[i][j]==0) return true;return false;
}void work5()
{work1();nc[1]=check();fz2();work2();nc[2]=check();fz2();work3();nc[3]=check();fz2();work4();nc[4]=check();fz2();
}void work6()
{fz1();work5();if (nc[1]==false&&nc[2]==false&&nc[3]==false&&nc[4]==false) bz=false;
}int main()
{int n;scanf("%d",&n);for (int i=1;i<=n;i++){int x,y,v;char f;cin>>x>>y>>v>>f;if (a[x][y]!=0) {cout<<"Game over!";return 0;}a[x][y]=v;if (f=='L') work1(); else if (f=='R') work2(); else if (f=='U') work3(); elseif (f=='D') work4();bz=true;if (i!=n) work6();if (bz==false){cout<<"Game over!";return 0;}}for (int i=1;i<=4;i++){for (int j=1;j<=3;j++)cout<<a[i][j]<<' ';cout<<a[i][4];cout<<endl;}return 0;
}

转载于:https://www.cnblogs.com/YYC-0304/p/10292837.html

2048(lj模拟)相关推荐

  1. PTA 一维数组 7-6 2048游戏模拟(1)单行向左移动叠加

    <2048> 是一款比较流行的数字游戏,最早于2014年3月20日发行.这款游戏的玩法很简单,每次可以选择上下左右滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢,系统也会在空白的地方 ...

  2. ESP32+ACS712霍尔电流传感器小结

    ESP32用ADC1即36引脚analogRead读取模拟量,读数为12位数值,即1111 1111 1111,最大值为4095, 资料 传送门 上说读取的最大的电压为3.3V,实测3V就满量程了.也 ...

  3. 【2021-05-23】7-3 模拟2048游戏(1)--单行向左移动叠加 个人题解

    第一次写题解,其实也是希望大家给一些更好的解决方案,感觉我这个版本太暴力了. 题目: <2048> 是一款比较流行的数字游戏,最早于2014年3月20日发行.这款游戏的玩法很简单,每次可以 ...

  4. java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器

    java通用象棋游戏 The Universal Chess Interface (UCI) has been around a long time and used by many chess en ...

  5. 基于 react, redux 最佳实践构建的 2048

    前段时间 React license 的问题闹的沸沸扬扬,搞得 React 社区人心惶惶,好在最终 React 团队听取了社区意见把 license 换成了 MIT.不管 React license ...

  6. python 安卓模拟点击_python模拟点击在ios中实现的实例讲解

    我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...

  7. 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...

  8. 计算机网络按功能自底而上划分,大连理工大学2011计算机期末模拟题3

    1.计算机的硬件系统由五大部分组成,其中( D )是整个计算机的指挥中心. A.接口电路 B.运算器 C.系统总线 D.控制器 2.十六进制数1000转换十进制数是(D). A.8192 B.2048 ...

  9. oracle模块损坏,Oracle中模拟及修复数据块损坏

    Oracle中模拟及修复数据块损坏,itpub link: http://www.itpub.net/showthread.php?threadid=201766[@more@]Oracle中模拟及修 ...

最新文章

  1. 一个网卡设置多个IP作用
  2. 日常生活小技巧 -- Source Insight 教程
  3. springboot----shiro集成
  4. 前端学习(3262):js高级教程(5)数据变量和内存
  5. BZOJ3038 上帝造题的七分钟2
  6. No instances available for CLOUD-PAYMENT-SERVICEpayment问题
  7. 手游SDK-数据上报
  8. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数001·3D函数
  9. 为什么数据库的内容像加密了_意外的负担(或者为什么我认为加密所有内容都不是个好主意)
  10. LOESS与LOWESS
  11. you-get视频解析下载
  12. 红米k30至尊纪念版和小米10青春版哪个好
  13. win10 Bat脚本获取管理员权限
  14. EI收录中国大陆期刊名录(2012年)
  15. (转)美国金融科技监管框架
  16. mysql 从第几个字符串开始截取_Mysql字符串截取函数SUBSTRING的用法说明
  17. 场效应管(MOS管)
  18. springboot毕设项目蔬菜种植水肥一体化管理系统70ro1(java+VUE+Mybatis+Maven+Mysql)
  19. Robotic Sort
  20. 南京邮电大学CTF题目writeup (一) 含题目地址

热门文章

  1. swift. 扩展类添加属性_Swift中用到extension的一些基本的扩展功能讲解
  2. python生成随机码_python生成随机验证码(中文验证码)示例
  3. 3DSlicer8:FAQ-2
  4. 图像中的灰度共生矩阵
  5. shell高级编程--引用
  6. 在IE下,当eval遇上function
  7. Linux 网络诊断命令
  8. zcmu-1184(矩阵乘法)
  9. Java isAlive()和join()的使用
  10. 知识图谱实践篇(五):KBQA Demo