设为首页 加入收藏

TOP

华为2013年9月22日面试上机题及答案
2014-11-17 18:41:47 来源: 作者: 【 】 浏览:27
Tags:华为 2013年 9月 22日 面试 上机 答案

描述:


实现简易字符串压缩算法:一个长度最大为128的字符串,由字母a-z或者A-Z组成,将其中连续出现2次以上(含2次)的字母转换为字母和出现次数,以达到压缩目的。



运行时间限制:


无限制



内存限制:


无限制



输入:


输入字符串,最大长度128



输出:


输入字符串



样例输入:


AAAABBBB



样例输出:


A4B4



答案提示:







#include


#include


#include


int main ()


{


char str[128],str1[256];


int i;


int len;


gets(str);


for(i=0;i<256;i++){


str1[i]=0;


}


len=strlen(str);


i=0;


while(i


{ if(str[i]-’a'<26 && str[i]-’a'>=0 || str[i]-’A'<26 && str[i]-’Z'>=0){


str1[(int)str[i]]++;


}


i++;


}



i=0;


while(i


if(str1[(int)str[i]]==1){


printf(“%c”,str[i]);


}else if(str1[(int)str[i]]>1 ){


printf(“%c%d”,str[i],str1[(int)str[i]]);


i=i+str1[(int)str[i]]-1;


}


i++;


}



return 0;


}
































竞赛积分猜想


描述:


某公司举办了知识竞赛。题目的计分规则如下:


1.每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前得到的分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。


2.每位选手都有一个起步的分数为10分。




程序要求:


如果某获胜选手最终得分是X分,如果不让你看比赛过程,请推断出他(她)哪个题目答对了,哪个题目答错了吗?把答对的题目记为1,答错的记为0,则10个题目的回答情况可以用仅含有1和0的串来表示。例如:0010110011 就是一种可能的情况,10道题目的编号从左到右依次排列。



你的任务是算出满足该得分的所有可能情况,答案之间用|号分隔,并且答案需要进行排序,将答案转换为十进制后数字小的排在前面,即0010110011应该排在1010110011的前面。如果不存在满足该分数的情况,则输出10个0:0000000000



运行时间限制:


无限制



内存限制:


无限制



输入:


选手的得分,正整数。



输出:


满足输入得分的所有可能的情况,答案之间用|号分隔,并且答案需要进行排序,将答案转换为十进制后数字小的排在前面,即0010110011应该排在1010110011的前面。如果不存在满足该分数的情况,则输出10个0:0000000000



样例输入:


100



样例输出:


0010110011|0111010000|1011010000



答案提示:







#include



using namespace std;



int count =0;


int j = 0;


void fun(int n,int score)


{


int a[11],i=1,k=512,sum=10;


while(i<11)


{


a[i] = (n/k)%2;


sum = a[i] sum*2 : sum-i;


k /= 2;


i++;


}


if(sum == score)


{


count++;


if (j != 0)


cout << ‘|’;


for(i=1;i<11;i++)


cout << a[i];


j=1;


}


}



int main()


{


int i,score;


cin >> score;


for(i=0;i<1024;i++)


fun(i,score);


if (count == 0)


cout << “0000000000″ << endl;


return 0;


}















Word Maze(单词迷宫)


描述:



Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f。



但现在你的任务可没有这么简单,你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。



如下图,指定W为”SOLO”,则在地图中红色标注了单词”SOLO”。





注意区分英文字母大小写,你只能上下左右行走。



运行时间限制:


无限制



内存限制:


无限制



输入:


输入第一行包含两个整数n、m(0



输出:


如果能在地图中连成给定的单词,则输出”YES”,否则输出”NO”。


注意:每个字母只能用一次。



样例输入:


5 5


SOLO


CPUCY


EKLQH


CRSOL


EKLQO


PGRBC



样例输出:


YES


答案提示:








#include


#include


int m,n;


char mz[30][30];


int vis[30][30];


char wd[110];


int len;


int dx[] = {1, 0, -1, 0};


int dy[] = {0, 1, 0, -1};


int dfs(int x, int y, int d){


if (d == len – 1) return 1;


for (int i = 0; i < 4; i++){


int nx = x + dx[i];


int ny = y + dy[i];


if (nx >= 0 && ny >= 0 && nx < n && ny < m && !vis[nx][ny] && mz[nx][ny] == wd[d+1]) {


vis[nx][ny] = 1;


if (dfs(nx , ny, d+1)) return 1;


}


}


return 0;



}


int main(){


//freopen(“a.txt”, “r”, stdin);


while (scanf(“%d%d”, &n, &m) != EOF) {


scanf(“%s”, wd);


len = strlen(wd);


for (int i = 0; i < n; i++)


scanf(“%s”, mz[i]);



int ok = 0;


for (int i = 0; i < n && !ok; i++)


for (int j = 0; j < m && !ok; j++) {


if (wd[0] == mz[i][j]) {


memset(vis, 0, sizeof vis);


vis[i][j] = 1;


if (dfs(i, j, 0)) ok = 1;


}


}


printf(“%s\n”, ok “YES”: “NO”);


}


return 0;


}


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Strutc Spring Hibernate常见面试.. 下一篇阳光海天信息咨询代招恒生电子大..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: