科大讯飞21届秋招提前批(C++工程师)

1.假设有1元、5元、10元、50元、100元的纸币分别c0,c1,c2,c3,c4张。现在要用这些钱来支付K元,至少要用多少张纸币。无解时输出-1。(贪婪算法)

#include
#include
using namespace std;
const int N = 5;
int min(int num1, int num2);
int value[N] = { 1,5,10,50,100 };
int giveChange(int moneyCount[], int K)
{
	int num = 0;
	for (int i = N - 1; i >= 0; i--)
	{
		int c = min(K / value[i], moneyCount[i]);
		K = K - c * value[i];
		num += c;
	}
	if (K > 0)
		num = -1;
	return num;
}
int min(int num1, int num2)
{
	return num1 < num2 ? num1 : num2;
}
int main()
{
	int a[5];
	int k;
	while (cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4])
	{
		cin >> k;
		int result = giveChange(a, k);
		cout << result << endl;
	}
	return 0;
}

2.关于判断两个矩阵相交,给出两个矩阵对角线顶点的坐标,如(0,0) (2,1),(2,1) (0,1)。相交输出1,不相交输出0。

#include
#include
using namespace std;
typedef struct
{
	int l;   //left
	int b;   //bottom
	int r;   //right
	int t;   //top
}CRect;
int main()
{
	CRect a, c;
	while (cin >> a.l >> a.b >> a.r >> a.t >> c.l >> c.b >> c.r >> c.t)
	{
		bool result = !(a.r<c.l || a.l>c.r || a.t<c.b || a.b>c.t);
		cout << result << endl;
	}
	return 0;
}

3.编程实现一个从字符串输入提取整数的程序,要尽量多的考虑异常输入的情况。
例子:+1a2 输出:12

#include
#include
using namespace std;
long long StrToInt(string str)
{
	int n = str.size();
	int s = 1;
	string ss;
	long long res = 0;
	if (!n) return 0;
	if (str[0] == '-') s = -1;
	for (int i = 0; i < n; i++)
	{
		if (str[i] >= '0' && str[i] <= '9')
			ss += str[i];
	}
	if (ss[0] != '0')
	{
		for (int i = 0; i < ss.size(); i++)
		{
			res = (res << 1) + (res << 3) + (ss[i] & 0xf);
		}
	}
	return res * s;
}
int main()
{
	string a;
	long long c;
	while (cin >> a)
	{
		c = StrToInt(a);
		cout << c << endl;
	}
	return 0;
}

4.考了快速排序,直接一组整数,进行快速排序,这里就不写了。

你可能感兴趣的:(C++,c++)