Maison > Article > base de données > Google2015校园招聘在线笔试题2
下午去打了个酱油,就做出一道最简单的题,2048游戏,实在是太菜了,马上要找工作了,复习的不到位啊! 解法: k记录要被放置的位置索引 1.k位置元素是0,将e[i]移到e[k] 2.k位置非零: (1)e[i]==e[k]相同,碰撞,e[k]×=2,k移到下一个位置(k或--k) (2
下午去打了个酱油,就做出一道最简单的题,2048游戏,实在是太菜了,马上要找工作了,复习的不到位啊!
解法:
k记录要被放置的位置索引
1.k位置元素是0,将e[i]移到e[k]
2.k位置非零:
(1)e[i]==e[k]相同,碰撞,e[k]×=2,k移到下一个位置(++k或--k)
(2)e[i]!=e[k]不同,k移到下一个位置(++k或--k),将e[i]移到e[k]
复杂度O(n^2),代码有点乱,没整理,如下:
#include <iostream> #include <string> inline void arrayMove(short (*val)[21],int n,std::string&dir){ if(dir=="up"){ for(int j=0;j<n int k="0;" for i="1;i<=n-1;++i){" if continue val j="0;j<n;++j){">=0;--i){ if(0==val[i][j]) continue; if(0==val[k][j]){ val[k][j]=val[i][j]; val[i][j]=0; }else if(val[i][j]==val[k][j]){ val[k][j]=val[i][j]=0;--j){ if(0==val[i][j]) continue; if(0==val[i][k]){ val[i][k]=val[i][j]; val[i][j]=0; }else if(val[i][j]==val[i][k]){ val[i][k]=val[i][j]>T; while(++i>N; std::cin>>dir; for(int j=0;j<n for k="0;k<N;++k)" std::cin>>val[j][k]; arrayMove(val,N,dir); std::cout<br> <br> </n></n></string></iostream>