2018年8月29日 华为软件笔试题

1、求字符串中数字和

输入:
AB3ASD56n89-9

输出
166

解题思路;遍历字符串,先while统计‘-’的个数,在while统计数字,得到所得数字

代码:

#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;

int main()
{
	string str;
	cin >> str;
	string num;
	int sum = 0;
	int fuhao = 0;
	for (int i = 0; i < str.size(); i++){
		while (str[i] == '-'){
			fuhao++;
			i++;
		}
		while (str[i] >= '0' && str[i] <= '9'){
			num += str[i];
			i++;
		}
		if (num != ""){
			sum += pow(-1, fuhao)*stoi(num);
		}
		num = "";
		fuhao = 0;
	}
	cout << sum << endl;
    return 0;
}

2、卷积公式求解

输入描述:最高阶为x^4,从高阶到低阶依次输入相应的系数,系数为复数形式,包括正数、负数

               按照以上规则 输入两个式子

输出描述:从高阶到低阶系数输出

输入:


1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

输出:


0
2
0
4
0
6
0
8
0
10
0
8
0
6
0
4
0
2

输入输出解释:a=(i+i)+(1+i)x+(1+i)x^2+(1+i)x^3+(1+i)x^4

                         b=(i+i)+(1+i)x+(1+i)x^2+(1+i)x^3+(1+i)x^4

输出:c=2i+4i+8i+10i+8i+6i+4i+2i

c(0)=a(0)*b(0);

c(1)=a(1)*b(0)+a(0)*b(1)

c2=a0*b2+a1*b1+a2*b0;

.........

cn=a0*b(n)+a(1)*b(n-1)+a(2)*b(n-2)...........a(n)*b(0);

代码:

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
vector<int> solution(vector<int>num1, vector<int>num2)//对两个复数进行乘运算
{
	int a = num1[0] * num2[0] - num1[1] * num2[1];
	int b = num1[0] * num2[1] + num1[1] * num2[0];
	vector<int>res = { a, b };
	return res;
}
vector<int> add(vector<int>num1, vector<int>num2)//对两个复数进行加运算
{
	int a = num1[0] +num2[0];
	int b = num1[1] +num2[1];
	vector<int>res = { a, b };
	return res;
}
int main()
{
	vector<vector<int>>a;
	vector<vector<int>>b;
	int num1, num2;
	for (int i = 0; i<5; i++){
		cin >> num1 >> num2;
		a.push_back({ num1, num2 });
	}
	for (int i = 0; i<5; i++){
		cin >> num1 >> num2;
		b.push_back({ num1, num2 });
	}
	reverse(a.begin(), a.end());//进行翻转保证系数从低阶到高阶
	reverse(b.begin(), b.end());
	vector<vector<int>>c;
	for (int i = 0; i <9 ; i++){
		vector<int> res = {0,0};
		for (int index1 = 0; index1 <= i; index1++){
			if ((i - index1 >= 0) &&( i - index1 <= 4)&&index1>=0 &&index1<=4){
				vector<int>tem = solution(a[index1], b[i - index1]);
				res = add(res, tem);
			}
		}
		c.push_back(res);
	}
	//int i = c.size();
	for (auto i : c){
		for (auto ii : i){
			cout << ii << endl;
		}
	}
	//system("pause");
	return 0;
}

3、牛繁殖

一对牛一个小时繁殖1对牛,新生出来牛,过3h之后,才可以进行繁殖

eg: 最开始有1头牛,繁殖6h有多少头

  1h 2h 3h 4h 5h 6h
  A B C D E F
          A1 A2
            B1
1 2 3 4 5 7 10

规律:num(i)=num(i-1)+num(i-4)//num(i)第i个小时有多少头牛\

#include<iostream>
using namespace std;
int main()
{
	int N,M,k;
	long long num[50];
	cin>>N;
	int i;
	while(N--)
	{
		i=0;
		cin>>M>>k;
		num[0]=2;
		for(i=1;i<k;i++)
		{
			if(i>=4)
				num[i]=num[i-1]+num[i-4];
			else 
				num[i]=num[i-1]+1;
		}
		cout<<M*num[k-1]<<endl;
	
	}
 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/liugg2016/article/details/82192763
今日推荐