华为机试较难的题目

问题描述: 
 在计算机中,由于处理器位宽限制,只能处理有限精度的十进制整数加减法,比如在32位宽处理器计算机中,
 参与运算的操作数和结果必须在-231~231-1之间。如果需要进行更大范围的十进制整数加法,需要使用特殊
 的方式实现,比如使用字符串保存操作数和结果,采取逐位运算的方式。如下:
9876543210 + 1234567890 = ?
让字符串 num1="9876543210",字符串 num2="1234567890",结果保存在字符串 result = "11111111100"。
-9876543210 + (-1234567890) = ?
让字符串 num1="-9876543210",字符串 num2="-1234567890",结果保存在字符串 result = "-11111111100"。
 要求编程实现上述高精度的十进制加法。
 要求实现函数: 
 void add (const char *num1, const char *num2, char *result)
 【输入】num1:字符串形式操作数1,如果操作数为负,则num1[0]为符号位'-'
 num2:字符串形式操作数2,如果操作数为负,则num2[0]为符号位'-'
 【输出】result:保存加法计算结果字符串,如果结果为负,则result[0]为符号位。
 注:
I、   当输入为正数时,'+'不会出现在输入字符串中;当输入为负数时,'-'会出现在输入字符串中,且一定在输入字符串最左边位置;
 II、  输入字符串所有位均代表有效数字,即不存在由'0'开始的输入字符串,比如"0012", "-0012"不会出现;
 III、 要求输出字符串所有位均为有效数字,结果为正或0时'+'不出现在输出字符串,结果为负时输出字符串最左边位置为'-'。

#include
#include
using namespace std;
int compare(string &num1,string &num2);
string &add(string &num1,string &num2,string &result);
string &minu(string &num1,string &num2,string &result);
int main()
{  
	string num1,num2,result,temp;
	while(cin>>num1>>num2) {
		if(num1[0]=='-'&&num2[0]=='-') {
			num1.erase(0,1);
			num2.erase(0,1);
			result.push_back('-');
			add(num1,num2,result);
		}
		else if((num1[0]!='-'&&num2[0]=='-')||(num1[0]=='-'&&num2[0]!='-')) {
			if(num2[0]=='-')
				num2.erase(0,1);
			else
				num1.erase(0,1);
			int m=compare(num1,num2);
			if(m==0){
				result.push_back('-');
				minu(num2,num1,result);
			}
			else if(m==1)
				minu(num1,num2,result);
			else 
				result.push_back('0');
		}
		else
			add(num1,num2,result);
		cout<num2.size())
		return 1;
	else
	{
		for(int i=0;inum2[i])
				return 1;
		}
		return 3;
	}
}
string &add(string &num1,string &num2,string &result)
{
	string temp;
	int m1=num1.size();
	int m2=num2.size();
	int m=m1>=m2?m2:m1;
	int flag=0,num;
	for(int i=0;i=10) {
			flag=1;
			temp.push_back(num%10+'0');
		}
		else {
			temp.push_back(num+'0');
			flag=0;
		}
	}
	if(m1>m2) {
		for(int i=m1-1-m;i>=0;i--) {
			num=(num1[i]+'0')+flag;
			if(num>=10) {
				flag=1;
				temp.push_back(num%10+'0');
			}
			else {
				temp.push_back(num+'0');
				flag=0;
			}
		}
	}
	else if(m1==m2) {
		if(flag==1)
			temp.push_back('1');
	}
	else {
		for(int i=m2-1-m;i>=0;i--) {
			num=(num2[i]+'0')+flag;
			if(num>=10) {
				flag=1;
				temp.push_back(num%10+'0');
			}
			else {
				temp.push_back(num+'0');
				flag=0;
			}
		}
	}
	int n=temp.size();
	char c;
	for(int i=0;im2)
	{
		for(int i=m1-1-m2;i>=0;i--)
		{
			num=(num1[i]-'0')-flag;
			if(num<0)
			{
				temp.push_back(num+10+'0');
				flag=1;
			}
			else
			{
				temp.push_back(num+'0');
				flag=0;
			}
		}
	}
	int n=temp.size();
	char c;
	for(int i=0;i

Word Maze 是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f。 但现在你的任务可没有这么简单,你现在于一个(n×m的矩阵)当中,里面到都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。 如下图,指定W为“SOLO”,则在地图中红标注了单词“SOLO”。 注意区分英文字母大小写,你只能上下左右行走。
运行时间限制:  无限制
内存限制:  无限制
输入:
输入第一行包含两个整数n、m(0
输出:
如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。注意:每个字母只能用一次。
样例输入:
5 5
SOLO
CPUCY
EKLQH
CRSOL
EKLQO
PGRBC
样例输出:yes 

#include
#include
#include
using namespace std;
void search(char **p,bool **visit,const string &w,int pos,int n,int m,int s,int e);
int main()
{
	int n,m,pos=0;
	cin>>n>>m;
	string w;
	cin>>w;
	char **p=new char*[n];
	bool **visit=new bool*[n];
	for(int i=0;i>p[i][j];
			visit[i][j]=false;
		}
		for(int i=0;i=0&&visit[s-1][e]==false&&p[s-1][e]==w[pos])
	{
		visit[s-1][e]=true;
		search(p,visit,w,pos+1,n,m,s-1,e);
	}
	if(e-1>=0&&visit[s][e-1]==false&&p[s][e-1]==w[pos])
	{
		visit[s][e-1]=true;
		search(p,visit,w,pos+1,n,m,s,e-1);
	}
	if(s+1

 电话号码 one two 。。。nine zero
翻译成1  2 。。9 0

中间会有double

例如输入:OneTwoThree
输出:123

输入:OneTwoDoubleTwo
输出:1222

输入:1Two2 输出:ERROR

输入:DoubleDoubleTwo 输出:ERROR

第三题:有空格,非法字符,两个Double相连,Double位于最后一个单词 都错误

#include 
#include 
#include 
#include 
using namespace std;

int main()
{
	string str;
	while(cin>>str) {
		if(str.find(" ")!=-1)
		{
			cout<<"ERROR"<12&&str[str.find("Double")+6]=='D') {
			cout<<"ERROR"<6&&str.rfind("Double")==str.length()-6) {
			cout<<"ERROR"<

不能入住的房客数

题目描述:

       有一个宾馆,只有m个房间(room),有房客(A~Z)到来时,若有空房间则可以立即入住;没有空房间则不能入住,旅客可以选择立即离开或者等待空房间;

假设给定了各个旅客到达和离开的顺序(如HFBJJBKFHMMSSLPWWPLK),问有多少个旅客没能入住。 

要求:

输入:房间数  旅客到达离开的序列

输出:最终没能入住的旅客数

样例:

输入:3  HFBJJBKFHMMSSLPWWPLK

输出:2

#include 
#include 
#include 
#include 
using namespace std;
vector arraylist;

bool isInRoom(vector arraylist,char user)
{
	 bool temp=false;
	 for(int i=0;i>num;
	cin>>users;

	int result=0;
	for(int i=0;i::iterator iter = find(arraylist.begin(),arraylist.end(),users[i]);
			arraylist.erase(iter);
		}
		else if(arraylist.size()::iterator iter = arraylist.end();
			arraylist.insert(iter,users[i]);
		}
		else {
			result++;
			continue;
		}
	}
	cout<

你可能感兴趣的:(名企笔试机试题目)