【华为笔试】输入:A={11,13,15},B={12,14,16},R=1

前两天做华为的题,结果太菜,当天结束后,把第一题自己终于做出来了。

我要吐槽一下华为,笔试前一个半小时通知笔试,还和我小米笔试冲突了,结果还做的不好。

第一道题:
输入字符串:A={1,3,5},B={2,4,6},R=1
输出为:(1,2)(3,4)(5,6)
解释:
1.A和B中值已经默认升序输入;
2.输出的点集,括号第一个是来自A,第二个来自B,且连个值的差不超过R;
3.第一个值小于第二个值;
4.当B中没有符合2和3中的值时,输出B中离A最近的值且满足3.
举个例子:
输入:A={11,13},B={12,16},R=1
输出:(11,12)(13,16)

看着挺简单的吧?当时死活没做出来。后来自己当天晚上发誓不做出来不回寝室。下面时我的代码:

#include <iostream>
#include <string>
#include <vector>
using namespace std;
//输入:A={11,13,15},B={12,14,16},R=1
//A={11,13},B={12,16},R=1
vector<int> convert(string s){
	vector<int> nums;
	int temp = 0;
	for (int m = 0; m < s.size(); m++){
		if (s[m] == ','){
			nums.push_back(temp);
			temp = 0;
		}
		else
			temp = temp *10 + s[m] - '0';
		if (m == (s.size() - 1)){
			nums.push_back(temp);
		}
	}
	return nums;
}
int main(){
	string iputs;
	cin >> iputs;
	
	vector<int> A,B;
	int R;
	string as = "", bs = "", rs = "";
	int flag = 0;
	分别提取字符串
	for (int i = 0; i < iputs.size(); i++){
		if (iputs[i] == '{' && iputs[i - 2] == 'A'){
			flag = 1;
			continue;
		}
		if (iputs[i] == '{' && iputs[i - 2] == 'B'){
			flag = 2;
			continue;
		}
		if (iputs[i] == '=' && iputs[i - 1] == 'R'){
			flag = 3;
			i++;
		}
		
		if (flag == 1){
			if (iputs[i] == '}'){
				flag = 0;
				continue;
			}
			as += iputs[i];
		}
		if (flag == 2){
			if (iputs[i] == '}'){
				flag = 0;
				continue;
			}
			bs += iputs[i];
		}
		if (flag == 3){
			rs += iputs[i];
		}
	}
	//cout << as << ';' << bs << endl;
	
	字符串转vector
	A = convert(as);
	B = convert(bs);
	R = convert(rs)[0];

	//进行题述输出
	for (int m = 0; m < A.size(); m++){
		int ff = 0;
		for (int n = 0; n < B.size(); n++){
			if ((A[m] < B[n]) && (A[m] + R >= B[n])){
				ff = 1;
				cout <<'(' << A[m]<<','<<B[n]<<')';
			}
		}
		int q = 0;
		while(ff == 0){
			
			if (A[m] < B[q] && q < B.size()){
				cout <<'(' << A[m]<<','<<B[q]<<')';
				ff = 2;
			}
			q++;
			if (q >= B.size()){
				ff = 2;
			}
		}
		//cout << '*';
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值