北邮第一次机考

贴邮票
题目描述
现在有两种面值的邮票,一种为8角,一种为6角。你要付n角的邮资(不能多付也不能少付),请给出邮票张数最少的方案。如果没有正好的方案则输出-1。
输入:
只有一行,为若干个整数(至少有两个)。这些整数中的最后一个一定是-1,其他整数均大于0,这些大于0的整数代表邮资。
输出
若干行,每行依次对应输入的一个邮资,如果该邮资有正好的方案,则为两个用空格分隔的整数,代表张数最少的方案。前边的数字代表需要的8角的邮票的张数,后边的数字代表6角的邮票的张数;如果该邮资没有正好的方案则输出-1。测试用例保证所有整数均可以用int存储。

      输入样例
      24 14 11 -1       
      输出样例
       3 0
       1 1
      -1

代码实现:

#include
using namespace std;
int main()
{
	int n, cnt = 0, sign = 0;
	while (cin >> n){
		if (n == -1)break;
		for (int i = n / 8; i >= 0; i--)
			for (int j = n / 6; j >= 0; j--)
				if (8 * i + 6 * j == n){
					cout << i << " " << j << endl;
					cnt++;
					sign = 1;//break只能跳出最里层的循环,可设置标记跳出外层循环
				}
			if (sign == 1){
				sign = 0;//标记置零
				break;
			}
		if (cnt == 0)cout << -1 << endl;//若无方案,输出-1
		cnt = 0;
	}
	return 0;
}

斐波那契数列二
题目描述
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368………这个数列从第3项开始,每一项都等于前两项之和。现请你写一个程序计算这个数列的第n项值除以3的余数。
输入:
第一行为一个整数t(0 输出
t行,每行依次对应输入的一组测试用例,如果该组测试用例输入为n,则对应输出斐波那契数列第n项的值除以3的余数。

      输入样例
      5
      1
      2
      3
      4
      5
      输出样例
       1
       1
       2
       0
       2

简单递归实现斐波那契数列的计算,测试到第四组数据溢出:

#include
using namespace std;
typedef long long ll;
int main()
{
	ll n, f;
	int t;
	cin >> t;
	for (int i = 0; i < t; i++){
		cin >> n;
		if (n == 1 || n == 2)
			cout << 1 << endl;
		else
		{
			ll sum = 0, result = 0;
			ll a = 1, b = 1;
			ll cnt = 2;
			while (cnt < n){
				sum = a + b;
				b = a;
				a = sum;
				cnt++;
			}
			f = sum / 3;
			result = sum - 3 * f;
			cout << result << endl;
		}
	}
	return 0;
}

尽管使用了long long类型,依然溢出。此题并不是实现斐波那契数列的算法,而是找规律的题目。
f(n)%3呈现出1,1,2,0,2,2,1,0的周期性规律。
代码实现:

#include
using namespace std;
int main()
{
	int n, x;
	cin >> n;
	for (int i = 0; i < n; i++){
		cin >> x;
		switch (x % 8){
		case 1:
		case 2:
		case 7:
			cout << 1 << endl;break;
		case 3:
		case 5:
		case 6:
			cout << 2 << endl;break;
		case 4:
		case 0:
			cout << 0 << endl;break;
		default:break;
		}
	}
	return 0;
}

总结:遇到这种已经使用了最大数据类型仍然溢出的题目,考虑找规律的方法。

你可能感兴趣的:(数据结构与算法)