Google2015校园招聘在线笔试题2

php中文网
发布: 2016-06-07 15:49:39
原创
1382人浏览过

下午去打了个酱油,就做出一道最简单的题,2048游戏,实在是太菜了,马上要找工作了,复习的不到位啊! 解法: k记录要被放置的位置索引 1.k位置元素是0,将e[i]移到e[k] 2.k位置非零: (1)e[i]==e[k]相同,碰撞,e[k]×=2,k移到下一个位置(k或--k) (2

下午去打了个酱油,就做出一道最简单的题,2048游戏,实在是太菜了,马上要找工作了,复习的不到位啊!


解法:

BRANDMARK
BRANDMARK

AI帮你设计Logo、图标、名片、模板……等

BRANDMARK 180
查看详情 BRANDMARK

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;++j){
			int k=0;
			for(int i=1;i<=n-1;++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]<<1;
					val[i][j]=0;
					++k;
				}else{
					++k;
					if(k!=i){
						val[k][j]=val[i][j];
						val[i][j]=0;
					}
				}
			}
		}
	}else if(dir=="down"){
		for(int j=0;j<n;++j){
			int k=n-1;
			for(int i=n-2;i>=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]<<1;
					val[i][j]=0;
					--k;
				}else{
					--k;
					if(k!=i){
						val[k][j]=val[i][j];
						val[i][j]=0;
					}
				}
			}
		}
	}else if(dir=="left"){
		for(int i=0;i<=n-1;++i){
			int k=0;
			for(int j=1;j<n;++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]<<1;
					val[i][j]=0;
					++k;
				}else{
					++k;
					if(k!=j){
						val[i][k]=val[i][j];
						val[i][j]=0;
					}
				}
			}
		}
	}else if(dir=="right"){
		for(int i=0;i<=n-1;++i){
			int k=n-1;
			for(int j=n-2;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]<<1;
					val[i][j]=0;
					--k;
				}else{
					--k;
					if(k!=j){
						val[i][k]=val[i][j];
						val[i][j]=0;
					}
				}
			}
		}
	}
}
int main(int argc,char**argv){
	int T=0;
	int N=0;
	int i=0;
	short (*val)[21]=new short[21][21];
	std::string dir;
	std::cin>>T;
	while(++i<=T){
		std::cin>>N;
		std::cin>>dir;
		for(int j=0;j<N;++j)
			for(int k=0;k<N;++k)
				std::cin>>val[j][k];
		
		arrayMove(val,N,dir);
		std::cout<<"Case #"<<i<<":"<<std::endl;
		for(int j=0;j<N;++j){
			
			std::cout<<val[j][0];
			for(int k=1;k<N;++k)
				std::cout<<" "<<val[j][k];
			std::cout<<std::endl;
		}
		
	}
}
登录后复制


最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号