2048(lj模拟)
题目描述
此时,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模拟)相关推荐
- PTA 一维数组 7-6 2048游戏模拟(1)单行向左移动叠加
<2048> 是一款比较流行的数字游戏,最早于2014年3月20日发行.这款游戏的玩法很简单,每次可以选择上下左右滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢,系统也会在空白的地方 ...
- ESP32+ACS712霍尔电流传感器小结
ESP32用ADC1即36引脚analogRead读取模拟量,读数为12位数值,即1111 1111 1111,最大值为4095, 资料 传送门 上说读取的最大的电压为3.3V,实测3V就满量程了.也 ...
- 【2021-05-23】7-3 模拟2048游戏(1)--单行向左移动叠加 个人题解
第一次写题解,其实也是希望大家给一些更好的解决方案,感觉我这个版本太暴力了. 题目: <2048> 是一款比较流行的数字游戏,最早于2014年3月20日发行.这款游戏的玩法很简单,每次可以 ...
- java通用象棋游戏_在通用国际象棋界面周围模拟GraphQL包装器
java通用象棋游戏 The Universal Chess Interface (UCI) has been around a long time and used by many chess en ...
- 基于 react, redux 最佳实践构建的 2048
前段时间 React license 的问题闹的沸沸扬扬,搞得 React 社区人心惶惶,好在最终 React 团队听取了社区意见把 license 换成了 MIT.不管 React license ...
- python 安卓模拟点击_python模拟点击在ios中实现的实例讲解
我们都知道因为操作系统的不同,很多游戏区分为安卓和苹果两个版本.那么之前学会python模拟点击的小伙伴开始担心,如果手机是ios版本那还能使用吗?这个问题小编进行了测试,小伙伴们完全不用忧虑ios版 ...
- 我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 猜猜它是什么?印着姓名.职位和邮箱,看起来是个名片.可是右下角有芯片,看起来又像是个PCB电路板. 其实它是一台超迷你的ARM计算机,不仅 ...
- 计算机网络按功能自底而上划分,大连理工大学2011计算机期末模拟题3
1.计算机的硬件系统由五大部分组成,其中( D )是整个计算机的指挥中心. A.接口电路 B.运算器 C.系统总线 D.控制器 2.十六进制数1000转换十进制数是(D). A.8192 B.2048 ...
- oracle模块损坏,Oracle中模拟及修复数据块损坏
Oracle中模拟及修复数据块损坏,itpub link: http://www.itpub.net/showthread.php?threadid=201766[@more@]Oracle中模拟及修 ...
最新文章
- 一个网卡设置多个IP作用
- 日常生活小技巧 -- Source Insight 教程
- springboot----shiro集成
- 前端学习(3262):js高级教程(5)数据变量和内存
- BZOJ3038 上帝造题的七分钟2
- No instances available for CLOUD-PAYMENT-SERVICEpayment问题
- 手游SDK-数据上报
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数001·3D函数
- 为什么数据库的内容像加密了_意外的负担(或者为什么我认为加密所有内容都不是个好主意)
- LOESS与LOWESS
- you-get视频解析下载
- 红米k30至尊纪念版和小米10青春版哪个好
- win10 Bat脚本获取管理员权限
- EI收录中国大陆期刊名录(2012年)
- (转)美国金融科技监管框架
- mysql 从第几个字符串开始截取_Mysql字符串截取函数SUBSTRING的用法说明
- 场效应管(MOS管)
- springboot毕设项目蔬菜种植水肥一体化管理系统70ro1(java+VUE+Mybatis+Maven+Mysql)
- Robotic Sort
- 南京邮电大学CTF题目writeup (一) 含题目地址