华为2015年实习生招聘考试试题

第一题:

描述:

目描述:

编写一个函数,将字符串中的大写的字母(A~Z)挑出来,同时保留原字符串中的空格,将挑出的大写字母和空格按原始位置组成新的字符串。

例如:

1)输入:AUStralia;

输出:AUS

2)输入:He Is a DoG

输出:H I DG

运行时间限制:

1 Sec

内存限制:

128 MByte

输入:

字符串

输出:

仅有大写字母和空格的字符串

样例输入:

AUStralia

样例输出:

AUS

#include <string>
#include <iostream>
using namespace std;

int main()
{

		string str;
	   getline(cin,str);
	   string substr;
	   bool chuxian=false;//判断第一个大写字母出现
		for(int i=0;i<str.size();i++)
		{
          
         	if(str[i]>='A'&&str[i]<='Z')
			{ 
				substr.append(1u,str[i]);
				chuxian=true;
			}
			 else if(str[i]==' '&&chuxian)//只有第一个大写字符出现,才能加空格
			 {
                 substr.append(1u,str[i]);
			}
			
		}
		cout<<substr<<endl;
	return 0;
}
第二题:

描述:

根据依次输入的数字,按到从大到小排序

运行时间限制:

10 Sec

内存限制:

128 MByte

输入:

一行正整数,其长度小于4096,整数之间用非数字隔开



输出:

排序后的整数,一个空格隔开

样例输入:

8 7R9t2 5 3

样例输出:

9 8 7 5 3 2

补充:

样例输入: 8er7Rd9st2    5 3
样例输出: 9  8  7  5  3  2

样例输入: er7Rd9st2    5 3
样例输出:        9  7  5  3  2

#include <vector>
#include <string>
#include <iostream>
#include <set>
using namespace std;

int main()
{
   multiset<int> num;
	int n;
   string str;
   getline(cin,str); 
	string substr;
		for(int i=0;i<str.size()+1;i++)
		{
          
         	if(str[i]>='0'&&str[i]<='9')
			{ 
				substr.append(1u,str[i]);	
			}
			else
			{
			if(i>=1&&str[i-1]>='0'&&str[i-1]<='9')
			{
				n=atoi(const_cast<char*>(substr.c_str()));
		        num.insert(n);
		       //substr.swap(string(" "));
				substr.clear();
			}
			}
		}
		int k=0;
		int size=num.size();
		for(multiset<int>::reverse_iterator iter=num.rbegin();iter!=num.rend();++iter)
		{
		cout<<*iter<<" ";
		if(k<size)
			cout<<" ";
		}
		cout<<endl;
	return 0;
}
第三题:

描述:

给你一个N*M的矩阵,每个位置的值是0或1,求一个面积最大的子矩阵,这个矩阵必须是一个正方形,且里面只能由1构成,输出最大的正方形边长

运行时间限制:

2 Sec

内存限制:

无限制

输入:

第一行输入两个整数n,m,之后n行,每行m个数字,为矩阵第i行第j列的值,只可能是0或者1
n,m<=400

输出:

一个整数,为最大正方形的边长

样例输入:

3 3

1 1 1

1 1 1

0 0 1

样例输出:

2


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 

int max(int i,int j)
{
	return i>=j?i:j;
}
int min(int i,int j)
{
	return i<=j?i:j;
}
#define MAXN 1001
 
int matrix[MAXN][MAXN];
int lagest_rectangle(/*int **matrix, */int m, int n) {
    int i, j;
    int *H = (int*) malloc(n * sizeof(int)); // 高度
    int *L = (int*) malloc(n * sizeof(int)); // 左边界
    int *R = (int*) malloc(n * sizeof(int)); // 右边界
    int ret = 0;
    memset(H, 0, n * sizeof(int));
    memset(L, 0, n * sizeof(int));
    for (i = 0; i < n; i++) R[i] = n;
    for (i = 0; i < m; ++i) {
        int left = 0, right = n;
        // calculate L(i, j) from left to right
        for (j = 0; j < n; ++j) {
            if (matrix[i][j] == 1) {
                ++H[j];
                L[j] = max(L[j], left);
            } else {
                left = j + 1;
                H[j] = 0;
                L[j] = 0;
                R[j] = n;
            }
        }
        // calculate R(i, j) from right to left
        for (j = n - 1; j >= 0; --j) {
            if (matrix[i][j] == 1) {
                R[j] = min(R[j], right);
                ret = max(ret, min(H[j],R[j] - L[j]));
            }
            else {
                right = j;
            }
        }
    }
    return ret;
}
int main() {
    int m, n;
    int i, j;
    while (scanf("%d%d", &m, &n) > 0) {
        for (i = 0; i < m; i++) {
            for (j = 0; j < n; j++) {
                scanf("%d", &matrix[i][j]);
            }
        }
        printf("%d\n", lagest_rectangle(m, n));
    }
    return 0;
}

你可能感兴趣的:(招聘,华为)