zoukankan      html  css  js  c++  java
  • 1126 求递推序列的第N项 (Fnb + mod + 思维)

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
    给出A,B和N,求f(n)的值。
     
    Input
    输入3个数:A,B,N。数字之间用空格分割。(-10000 <= A, B <= 10000, 1 <= N <= 10^9)
    Output
    输出f(n)的值。
    Input示例
    3 -1 5
    Output示例

    6

    单单看题的话可能不难,但是有点坑,

    1,首先,对7 去余那么循环节的长度最长为49(7*7)(关于这里可以自己好好想一下,提升一下自己的思维)

    2,其次,mod运算是求一个正数的值,而c++里面则会算出负值,因此取mod之后加上mod再取mod

    AC:代码

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    ll v[50];
    int main()
    {
    	ll n,m,k,i;
    	cin>>n>>m>>k;
    	v[1] = 1;v[2] = 1;
    	for( i = 3;i<=49;i++)
    	{
    		v[i] = ((n*v[i-1] + m*v[i-2])%7 + 7)%7;
    		if(v[i] == 1 && v[i-1] ==1) break;
    	}
    	i -= 2;v[0] = v[i];
    //	for(int j = 0;j<=i;j++){
    //		printf("%d ",v[j]);
    //	}printf("
    ");
    	printf("%lld",v[k%i]);
    	return 0;
    }
  • 相关阅读:
    学生排序,使用三层优先级
    利用类计算学生成绩和排序
    join()函数
    对象
    015_eclipse开发环境的使用
    013_运算符_算术
    012_变量
    011_jdk7新特性
    010_类型提升问题
    008_浮点数误差问题
  • 原文地址:https://www.cnblogs.com/Nlifea/p/11746027.html
Copyright © 2011-2022 走看看