2014年华为7月校招(提前批)的一些题目
2014-08-21 14:21
260 查看
这是华为7月校招(提前批)的一些题目,没有给函数接口,从主函数开始编。每人三道题,机试时间两小时。60分的是第一题,100分的是第二题,160分的是第三题。
1、描述:
实现简易字符串压缩算法:一个长度最大为128的字符串,由字母a-z或者A-Z组成,将其中连续出现2次以上(含2次)的字母转换为字母和出现次数,以达到压缩目的。
运行时间限制: 无限制
内存限制: 无限制
输入:
输入字符串,最大长度128
输出:
输入字符串
样例输入: AAAABBBB
样例输出: A4B4
答案提示:
//2014-8-21 调试通过
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 128
int main(void)
{
char str[M],out[M];
int i=0, j=0, tmp=0;
while( (str[i++] = getchar()) != '\n')
{
// printf("%d", i);
if(i > 1)
{
if(str[i-1] == str[i-2])
tmp++;
else
{
out[j++] = str[i-2];
out[j++] = tmp+1+48;
tmp = 0;
}
}
}
//处理'\n'前面的最后一种字符
if(i > 1)
{
if(str[i-1] == str[i-2])
{
out[j++] = str[i-1];
out[j++] = tmp +1+48;
tmp = 0;
}
else
{
out[j++] = str[i-2];
out[j++] = tmp +1+48;
tmp = 0;
out[j++] = str[i-1];
out[j++] = tmp +1+48;
tmp = 0;
}
}
for(i=0; i<j-1; i++)
{
printf("%c", out[i]);
}
printf("\n");
system("pause");
return 0;
}
2、竞赛积分猜想 描述:
某公司举办了知识竞赛。题目的计分规则如下: 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
答案提示:
3、Word Maze(单词迷宫) 描述:
????Word?Maze?是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f。
但现在你的任务可没有这么简单,你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。
如下图,指定W为“SOLO”,则在地图中红色标注了单词“SOLO”。
注意区分英文字母大小写,你只能上下左右行走。
运行时间限制: 无限制
内存限制: 无限制
输入: 输入第一行包含两个整数n、m(0<n,?m<21)分别表示n行m列的矩阵,第二行是长度不超过100的单词W,从第3行到底n+3行是只包含大小写英文字母的长度为m的字符串。 输出: 如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。 注意:每个字母只能用一次。
样例输入: 5 5
SOLO
CPUCY
EKLQH
CRSOL
EKLQO
PGRBC
样例输出: YES
答案提示:
import java.util.*;
public class Main{
private static int n, m;
private static boolean[][] flagArr;
private static char[][] array;
private static boolean isFound;
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
String word;
while (cin.hasNext()){
n = cin.nextInt();
m = cin.nextInt();
array = new char
[m];
word = cin.next();
isFound = false;
for(int i=0; i<n; i++) {
array[i] = cin.next().toCharArray();
}
flagArr = new boolean
[m];
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++){
flagArr[i][j] = false;
}
}
findWord(word);
if(isFound) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
private static void findWord(String word) {
for(int i=0; i<n; i++)
for(int j=0; j<m; j++) {
if(array[i][j] == word.charAt(0)) {
flagArr[i][j] = true;
findNext(word, 1, i, j);
if(isFound)
return ;
else
flagArr[i][j] = false;
}
}
}
private static void findNext(String word, int index, int x, int y) {
if(index == word.length()) {
isFound = true;
return ;
} else if(index < word.length()){
int nextIndex = index + 1;
//up
if ((x-1)>=0 && (!flagArr[x-1][y]) && array[x-1][y]==word.charAt(index)) {
flagArr[x-1][y] = true;
findNext(word, nextIndex, x-1, y);
}
//right
if((y+1)<m && (!flagArr[x][y+1]) && array[x][y+1]==word.charAt(index)) {
flagArr[x][y+1] = true;
findNext(word, nextIndex, x, y+1);
}
//dowm
if ((x+1)<n && (!flagArr[x+1][y]) && array[x+1][y]==word.charAt(index)) {
flagArr[x+1][y] = true;
findNext(word, nextIndex, x+1, y);
}
//left
if((y-1)>0 && (!flagArr[x][y-1]) && array[x][y-1]==word.charAt(index)) {
flagArr[x][y-1] = true;
findNext(word, nextIndex, x, y-1);
}
flagArr[x][y] = false;
}
}
}
一、字符串截断输出(60分)
首先输入两个整数m,n,分别代表行数和长度,要求输出,将字符串截短成n长,不够补0,多了换行继续输出 如输入: 2,8
1234567812345678123 asd 输出
12345678 12345678 12300000 asd00000
二、字符串过滤后排序(60分)
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉,然后按字母表顺序输出。 比如字符串“abfcacde”输出结果为“abcdef”。
1、描述:
实现简易字符串压缩算法:一个长度最大为128的字符串,由字母a-z或者A-Z组成,将其中连续出现2次以上(含2次)的字母转换为字母和出现次数,以达到压缩目的。
运行时间限制: 无限制
内存限制: 无限制
输入:
输入字符串,最大长度128
输出:
输入字符串
样例输入: AAAABBBB
样例输出: A4B4
答案提示:
//2014-8-21 调试通过
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 128
int main(void)
{
char str[M],out[M];
int i=0, j=0, tmp=0;
while( (str[i++] = getchar()) != '\n')
{
// printf("%d", i);
if(i > 1)
{
if(str[i-1] == str[i-2])
tmp++;
else
{
out[j++] = str[i-2];
out[j++] = tmp+1+48;
tmp = 0;
}
}
}
//处理'\n'前面的最后一种字符
if(i > 1)
{
if(str[i-1] == str[i-2])
{
out[j++] = str[i-1];
out[j++] = tmp +1+48;
tmp = 0;
}
else
{
out[j++] = str[i-2];
out[j++] = tmp +1+48;
tmp = 0;
out[j++] = str[i-1];
out[j++] = tmp +1+48;
tmp = 0;
}
}
for(i=0; i<j-1; i++)
{
printf("%c", out[i]);
}
printf("\n");
system("pause");
return 0;
}
2、竞赛积分猜想 描述:
某公司举办了知识竞赛。题目的计分规则如下: 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
答案提示:
3、Word Maze(单词迷宫) 描述:
????Word?Maze?是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f。
但现在你的任务可没有这么简单,你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。
如下图,指定W为“SOLO”,则在地图中红色标注了单词“SOLO”。
注意区分英文字母大小写,你只能上下左右行走。
运行时间限制: 无限制
内存限制: 无限制
输入: 输入第一行包含两个整数n、m(0<n,?m<21)分别表示n行m列的矩阵,第二行是长度不超过100的单词W,从第3行到底n+3行是只包含大小写英文字母的长度为m的字符串。 输出: 如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。 注意:每个字母只能用一次。
样例输入: 5 5
SOLO
CPUCY
EKLQH
CRSOL
EKLQO
PGRBC
样例输出: YES
注意区分英文字母大小写,你只能上下左右行走。 | |
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: | 输入第一行包含两个整数n、m(0<n, m<21)分别表示n行m列的矩阵,第二行是长度不超过100的单词W,从第3行到底n+3行是只包含大小写英文字母的长度为m的字符串。 |
输出: | 如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。注意:每个字母只能用一次。 |
样例输入: | 5 5 SOLO CPUCY EKLQH CRSOL EKLQO PGRBC |
样例输出: | YES |
注意区分英文字母大小写,你只能上下左右行走。 | |
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: | 输入第一行包含两个整数n、m(0<n, m<21)分别表示n行m列的矩阵,第二行是长度不超过100的单词W,从第3行到底n+3行是只包含大小写英文字母的长度为m的字符串。 |
输出: | 如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。注意:每个字母只能用一次。 |
样例输入: | 5 5 SOLO CPUCY EKLQH CRSOL EKLQO PGRBC |
样例输出: | YES |
import java.util.*;
public class Main{
private static int n, m;
private static boolean[][] flagArr;
private static char[][] array;
private static boolean isFound;
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
String word;
while (cin.hasNext()){
n = cin.nextInt();
m = cin.nextInt();
array = new char
[m];
word = cin.next();
isFound = false;
for(int i=0; i<n; i++) {
array[i] = cin.next().toCharArray();
}
flagArr = new boolean
[m];
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++){
flagArr[i][j] = false;
}
}
findWord(word);
if(isFound) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
private static void findWord(String word) {
for(int i=0; i<n; i++)
for(int j=0; j<m; j++) {
if(array[i][j] == word.charAt(0)) {
flagArr[i][j] = true;
findNext(word, 1, i, j);
if(isFound)
return ;
else
flagArr[i][j] = false;
}
}
}
private static void findNext(String word, int index, int x, int y) {
if(index == word.length()) {
isFound = true;
return ;
} else if(index < word.length()){
int nextIndex = index + 1;
//up
if ((x-1)>=0 && (!flagArr[x-1][y]) && array[x-1][y]==word.charAt(index)) {
flagArr[x-1][y] = true;
findNext(word, nextIndex, x-1, y);
}
//right
if((y+1)<m && (!flagArr[x][y+1]) && array[x][y+1]==word.charAt(index)) {
flagArr[x][y+1] = true;
findNext(word, nextIndex, x, y+1);
}
//dowm
if ((x+1)<n && (!flagArr[x+1][y]) && array[x+1][y]==word.charAt(index)) {
flagArr[x+1][y] = true;
findNext(word, nextIndex, x+1, y);
}
//left
if((y-1)>0 && (!flagArr[x][y-1]) && array[x][y-1]==word.charAt(index)) {
flagArr[x][y-1] = true;
findNext(word, nextIndex, x, y-1);
}
flagArr[x][y] = false;
}
}
}
import java.util.*; public class Main{ private static int n, m; private static boolean[][] flagArr; private static char[][] array; private static boolean isFound; public static void main(String args[]){ Scanner cin = new Scanner(System.in); String word; while (cin.hasNext()){ n = cin.nextInt(); m = cin.nextInt(); array = new char [m]; word = cin.next(); isFound = false; for(int i=0; i<n; i++) { array[i] = cin.next().toCharArray(); } flagArr = new boolean [m]; for(int i=0; i<n; i++) { for(int j=0; j<m; j++){ flagArr[i][j] = false; } } findWord(word); if(isFound) { System.out.println("YES"); } else { System.out.println("NO"); } } } private static void findWord(String word) { for(int i=0; i<n; i++) for(int j=0; j<m; j++) { if(array[i][j] == word.charAt(0)) { flagArr[i][j] = true; findNext(word, 1, i, j); if(isFound) return ; else flagArr[i][j] = false; } } } private static void findNext(String word, int index, int x, int y) { if(index == word.length()) { isFound = true; return ; } else if(index < word.length()){ int nextIndex = index + 1; //up if ((x-1)>=0 && (!flagArr[x-1][y]) && array[x-1][y]==word.charAt(index)) { flagArr[x-1][y] = true; findNext(word, nextIndex, x-1, y); } //right if((y+1)<m && (!flagArr[x][y+1]) && array[x][y+1]==word.charAt(index)) { flagArr[x][y+1] = true; findNext(word, nextIndex, x, y+1); } //dowm if ((x+1)<n && (!flagArr[x+1][y]) && array[x+1][y]==word.charAt(index)) { flagArr[x+1][y] = true; findNext(word, nextIndex, x+1, y); } //left if((y-1)>0 && (!flagArr[x][y-1]) && array[x][y-1]==word.charAt(index)) { flagArr[x][y-1] = true; findNext(word, nextIndex, x, y-1); } flagArr[x][y] = false; } } }
一、字符串截断输出(60分)
首先输入两个整数m,n,分别代表行数和长度,要求输出,将字符串截短成n长,不够补0,多了换行继续输出 如输入: 2,8
1234567812345678123 asd 输出
12345678 12345678 12300000 asd00000
二、字符串过滤后排序(60分)
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉,然后按字母表顺序输出。 比如字符串“abfcacde”输出结果为“abcdef”。
相关文章推荐
- 华为机试网测题目总结2014/9/12提前批
- 华为2015提前批校招——机试题
- 2014年华为校招机试题目
- 【华为】2013校招机试的题目
- 华为2012秋季校招机试题-选秀节目打分(题目来自网络)
- 华为2012秋季校招机试题-数组处理(题目源自网络)
- 2015年华为校招提前批总结(09.02)
- 【华为】2013校招机试的题目-string的题目
- 华为2012秋季校招机试题-数组奇偶交叉重组(题目源自网络)
- 2014华为校招机试题目总结
- 总结一下一些简单但是自己又不清楚的知识点(华为题目)
- 华为校招软件上机考试题目解析
- 2016校招华为机试题目回忆1
- 2014年华为校招成渝地区上机试题
- 2014年爱奇艺的校招题目-大题第八题
- 华为2014年7月机试题输入正整数根据字符映射表输出对应字符
- 2016华为校招机试题目01
- 蜻蜓FM2014年校招笔试题目 - 规则二叉树
- 一些公司的2016年校招C/C++开发岗笔试题目(四)
- 2018华为校招机试题目练习