1005Number Sequence

//第一次错误尝试
/*
#include<iostream>
using namespace std;

unsigned f(unsigned a, unsigned b, unsigned n)
{
    if(n == 1 || n == 2)
        return 1;
    return (a * f(a, b, n-1) + b * f(a, b, n-2)) % 7;
}
int main()
{
    unsigned a, b, n;
    while(cin >> a >> b >> n, a !=0 && b != 0 && n != 0)
        cout << f(a, b, n) << endl;
    return 0;
}


*/
/*
1 1 3
1 2 10
0 0 0
*/
/*
//第二次错误尝试
#include<iostream>
using namespace std;

unsigned long f(unsigned long a, unsigned long b, unsigned long n)
{
    if(n == 1 || n == 2)
        return 1;
    return (a * f(a, b, n-1) + b * f(a, b, n-2)) % 7;
}
int main()
{
    unsigned long a, b, n;
    while(cin >> a >> b >> n, a !=0 && b != 0 && n != 0)
        cout << f(a, b, n) << endl;
    return 0;
}

*/
//本题先是用递归,但发现输入最大那个数100000000时总是溢出导致程序崩溃。
//后来想想是不是递归栈到极限了,改用for循环做,结果还是没噶最后只能上网求助。
//发现原来是鸽笼原理(又名:抽屉原理),数学啊,长见识了……又学到新知识了。。。
//本题应用:鸽笼原理

//网上搜到的代码
#include<iostream>
using namespace std;

int main()
{
    const size_t array_size = 50;
    int a, b, n, parr[array_size] = {0, 1, 1};
    while(cin >> a >> b >> n, a !=0 && b != 0 && n != 0)
    {
        for(size_t ix = 3; ix != array_size; ++ix)
            parr[ix] = (a * parr[ix - 1] + b * parr[ix - 2]) % 7;
        cout << parr[n%49] << endl;
    }
    return 0;
}


同时欢迎提出不同意见,以帮助我改进,不胜感激!!!

——桑海整理


你可能感兴趣的:(1005Number Sequence)