注册 登录
编程论坛 数据结构与算法

求一个编程题目的解法

nancy111 发布于 2021-11-26 12:57, 2027 次点击
球在自己脚下,有n位队友可以进行球传球配合。和队友通过k次传球后,球还在自己脚下,有多少种不同的传球方式。
输入正整数n和m,分别表示小明身边的队友数和传球次数。输出不同的传球方式数(由于该数字可能很大,请输出总方式数对10^9+7的余数即可)
3 回复
#2
diycai2021-11-26 14:55
m<=1时,无解。
n=1且m为奇数时,无解。
n=1且m为偶数时,1种解。

m=2时, f(m) = n
m>2时, f(m) = n*(f(m-1)+(-1)^m)

递归计算吧。
#3
diycai2021-11-26 15:16
程序代码:
int fun(int n, int m)
{
    if (m <= 1)
    {
        return 0;
    }
    if (n == 1)
    {
        if (m&1)
        {
            return 0;
        }
        else
        {
            return 1;
        }
    }
    if (m == 2)
    {
        return n;
    }
    if (m&1)
    {
        return n*(fun(n, m-1)-1);
    }
    else
    {
        return n*(fun(n, m-1)+1);
    }
}
void main()
{
    int n, m;
    while (1)
    {
        scanf("%d%d", &n, &m);
        printf("%d\n", fun(n, m));
    }
}

大数处理很麻烦,你可以参考https://blog.
#4
nancy1112021-11-26 19:18
回复 3楼 diycai
能写出来整个题目的过程么?遇到10^18这样的测试数据要怎么办。查资料说用数组来计算会快很多。
1