2016-2017学年第二学期C++第五章(2)

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;
}
  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值