华为2013年机试题目整理

问题1:
/*判断一个数目是不是成对称的特点*/
bool isNum(long num)
{
	int tmp = 0;
	int i = num;
	while(i)
	{
		tmp = i%10 + tmp * 10;
		i = i /10;
	}
	return (tmp == num);
}  
问题2:

编写一个函数,将输入的一串10个数字进行从小到大排序,但是要求偶数放在偶数位置上,奇数放在奇数位置上。

缺失的位置由0补齐。输入中不会有0。

输入

输入10组随机数字

输出

按照规则排序后输出样例

输入

53 8 21 43 3 7 51 62 13 68

样例输出

样例输出3 8 7 62 13 68 21 0 43 0 51 0 53

void  QSort(int *a, int low, int high)
{
	if (low > high) return;
	int piokey = a[low];
	int i = low;
	int j = high;
	while(i < j)
	{
		while(a[j] > piokey && i < j) j--;
		a[i] = a[j];
		while(a[i] < piokey && i < j) i++;
		a[j] = a[i]; 
	}
	a[i] = piokey;
	QSort(a,i+1,high);
	QSort(a,low,i-1);
}
int OddEvenSort(int *a, int len, int *b)
{
	QSort(a,0,len-1);
	int odd = 1;
	int even = 0;
	int i = 0;
	int blen = 0;
	while ( i < len)
	{
		if (a[i]%2==0)
		{
			b[even] = a[i];
		 	even+=2;
		 	blen = blen > even ? blen:even;
		}
		else
		{
			b[odd] = a[i];
			odd+=2;
			blen = blen > odd ? blen:odd;
		}
		i++;
	}
	return blen;
}

第二题、大数求和问题描述: 两个小于128位的大数

求其和输入:1234567890987654,888888888888888

输出: 2123456779876542

void myswap(char &a, char &b)
{
	char temp;
	temp = a;
	a = b;
	b = temp;

}
void BigAdd(char *inputOne, char *inputTwo, char *outPut)
{
	int lenOne = strlen(inputOne);
	int lenTwo = strlen(inputTwo);
	int minlen = lenOne>lenTwo?lenTwo : lenOne;
	int maxlen = lenOne

描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值。
表达式支持如下运算:“+、-、*、/”,其中“*”和“/”的优先级要高于“+”和“-”;
不需要考虑括号,且表达式之间没有空格;
例如:对于表达式"3-2+15*2",该表达式值为31.
 
运行时间限制: 60 Sec 
内存限制: 256 MByte 
输入: 加减乘除四则运算表达式,长度不超过1024字节,运算式中不含有括号和空格。
 
输出: 表达式的运算结果。
 
样例输入: 3-2+15*2
 
样例输出: 31

int Calc(char *exp)
{
	char op[255];
	int data[255];
	int mapop[255];
	memset(op,0,sizeof(op));
	memset(data,0,sizeof(data));
	memset(data,0,sizeof(mapop));
	for (int i = '0'; i < '9'; i++)
	mapop[i] = 1;
	mapop['+'] = 2;
	mapop['-'] = 2;
    mapop['*'] = 3;
	mapop['/'] = 3;	
	int len = strlen(exp);
	int tp = 0;
	int td = 0;
	int to = 0;
	int ans = 0;
	for (int i = 0; i < len + 1; i++)
	{
		if(mapop[exp[i]] == 1)
		tp = tp * 10 + exp[i] -'0';
		else
		{
			 if (mapop[exp[i]] != 1 || i == len)   
					data[td++] = tp;
			 if (mapop[op[to-1]] == 3)
				{
		    		if(op[to-1] == '*')
					{
					data[td-2] = data[td-2] * tp;
					}
					else
					{
						if (data[td-2] == 0)
							return -1;
						else
						data[td-2] = data[td-2] / tp;
					}
						to--;
						td--;
				}
		}
		if(mapop[exp[i]] == 2 || mapop[exp[i]] == 3)
		{
			op[to++] = exp[i];
			tp = 0;
		}
		
	}
	for(int i = td-1; i >=1; i--)
	{	
		if (op[--to] == '+')
			{
				ans = ans + data[i];
			}
		else
		{
			ans = ans - data[i];
		}
	}
	return ans + data[0];
}

 

你可能感兴趣的:(华为2013年机试题目整理)