趋势科技第二题

#include<iostream>
#include<vector>
using namespace std;
vector<int> res1(6);//存满足的组合
vector<int> res;//存每种满足组合的长度
void sift(vector<int> &RES,vector<int> &nums) {//根据张数要求,算最大面值符合组合
	if (nums[5] < RES[5]) {//100多的转换到50
		RES[4] += (RES[5] - nums[5]) * 2;
		res1[5] = nums[5];
	}
	if (nums[4] < RES[4]) {//50多的转换到20和10
		RES[3] += (RES[4] - nums[4]) * 2;
		RES[2] += (RES[4] - nums[4]);
		RES[4] = nums[4];
	}
	if (nums[3] < RES[3]) {//20多的转换到10
		RES[2] += (RES[3] - nums[3]) * 2;
		RES[3] = nums[3];
	}
	if (nums[2] < RES[2]) {//10多的转换到5
		RES[1] += (RES[2] - nums[2]) * 2;
		RES[2] = nums[2];
	}
	if (nums[1] < RES[1]) {//5多的转换到1
		RES[0] += (RES[1] - nums[1]) * 5;
		RES[1] = nums[1];
	}
	if (RES[0] > nums[0]) {
		for (int i = 0; i < RES.size(); i++) {
			RES[i] = 0;
		}
	}	
}
void fuc2() {//存入长度
	int num = 0;
	for (int i = 0; i < res1.size(); i++) {
		num += res1[i];
	}
	res.push_back(num);
}
void fuc1(int target, vector<int> nums) {

	int cptarget = target;
	int num100 = cptarget / 100;
	res1[5] = num100;

	cptarget -= num100 * 100;
	int num50 = cptarget / 50;
	res1[4] = num50;

	cptarget -= num50 * 50;
	int num20 = cptarget / 20;
	res1[3] = num20;

	cptarget -= num20 * 20;
	int num10 = cptarget / 10;
	res1[2] = num10;

	cptarget -= num10 * 10;
	int num5 = cptarget / 5;
	res1[1] = num5;

	cptarget -= num5 * 5;
	int num1 = cptarget;
	res1[0] = num1;
	sift(res1, nums);
	fuc2();

	while (res1[0]<=nums[0]) {
		if (res1[5]!=0) {
			nums[5]=res1[5]-1;
			sift(res1, nums);
			fuc2();
			continue;
		}
		if (res1[4] != 0) {
			nums[4]=res1[4]-1;
			sift(res1, nums);
			fuc2();
			continue;
		}
		if (res1[3] != 0) {
			nums[3]=res1[3]-1;
			sift(res1, nums);
			fuc2();
			continue;
		}
		if (res1[2] != 0) {
			nums[2]=res1[2]-1;
			sift(res1, nums);
			fuc2();
			continue;
		}
		if (res1[1] != 0) {
			nums[1]=res1[1]-1;
			sift(res1, nums);
			fuc2();
			continue;
		}
		if (res1[1] == 0 && res1[2] == 0 && res1[3] == 0 && res1[4] == 0 && res1[5] == 0) {
			break;
		}
	}
}

int main() {
	vector<int> nums(6);
	for (int i = 0; i < 6; i++) {
		int temp;
		cin >> temp;
		nums[i] = temp;
	}
	int target;
	cin >> target;

	fuc1(target, nums);
	int len = 0;
	for (int i = 0; i < res.size(); i++) {
		len += res[i];
	}
	cout << len;
	system("pause");
	return 0;
}

#笔试题目##趋势科技#
全部评论
点赞 回复 分享
发布于 2019-08-09 11:25

相关推荐

爱吃烤肠的牛油最喜欢...:50K是ssp了估计,ssp的人家多厉害都不用说,每年比例大概在百分之5左右
点赞 评论 收藏
分享
评论
1
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务