日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2048(lj模拟)

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。