C++ 上机课参考答案
本系列文章供北京邮电大学信通院及数媒学院「C++高级程序语言设计」上机课学生参考。
2016-2017学年第二学期C++第五章(2)
1511.VC++实验5.3 斐波那契数列
//VC++实验5.3 斐波那契数列
/*
题目描述
用非递归函数,求Fibonacci数列第n项。键盘输入一个n,输出Fibonacci数列第n项的值。
输入
3
输出
2
*/
#include <iostream>
using namespace std;
int fibonacci(int n)
{
int a = 1, b = 1, temp;
if(n == 1 || n == 2)
return 1;
for(int i = 3; i <= n; i++)
{
temp = a + b;
a = b;
b = temp;
}
return b;
}
int main()
{
int n;
cin >> n;
cout << fibonacci(n) << endl;
return 0;
}
1512.VC++实验5.4 计算排列
//VC++实验5.4 计算排列
/*
题目描述
编写程序计算排列,排列的公式P(n,m)=n!/(n-m)!,其中n>=m。请使用两个函数分别实现计算阶乘和计算排列。键盘输入n和m的值,输出它们的排列值。
输入
4 3
输出
24
*/
#include <iostream>
using namespace std;
int factorial(int x)
{
int factorial = 1;
for(int i = 1; i <= x; i++)
{
factorial *= i;
}
return factorial;
}
int fun(int n, int m)
{
return factorial(n) / factorial(n - m);
}
int main()
{
int n, m;
cin >> n >> m;
cout << fun(n, m) << endl;
return 0;
}
1514.VC++实验5.6 分糖果
//VC++实验5.6 分糖果
/*
题目描述
有10个小朋友围成一圈分糖果,老师顺次分给每人一定数量糖果(初始值为偶数)然后按照下列规则调整,所有小朋友同时把自己的糖果分一半给右边的人,糖果数变为奇数的人,向老师补要一块糖果,问经过多少次调整后,大家糖果数一样多,且每人多少块。建立两个函数,一个负责传递糖果,一个负责判断所有人的糖果是否相等。
输入
12 2 8 22 16 4 10 6 14 20
输出
16 18
*/
#include <iostream>
using namespace std;
static int a[10];
int pass()
{
int temp = a[9];
for(int i = 9; i > 0; i--)
{
a[i] = a[i] / 2 + a[i - 1] / 2;
}
a[0] = a[0] / 2 + temp / 2;
for(int i = 0; i < 10; i++)
if(a[i] % 2 != 0)
a[i]++;
}
int judge()
{
int sum = 0, n = 0;
while(1)
{
for(int i = 0; i < 10; i++)
sum += a[0] - a[i];
if(sum == 0)
{
cout << n << " " << a[0] << endl;
return 0;
}
pass();
n++;
sum = 0;
}
}
int main()
{
for(int i = 0; i < 10; i++)
cin >> a[i];
judge();
return 0;
}