51nod 1126 求递推序列的第N项 && hdu - 1005 Number Sequence (求周期)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126

http://acm.hdu.edu.cn/showproblem.php?pid=1005

注意上面一题和下面一题的区别,上面A,B可能取负数,但是mod跟c++中%是不一样的,mod只会得到非负数,两次跳进这个坑了.

然后就找周期,只要f[i-1]==1&&f[i]==1就可以跳出,然后i-2就是周期,输出n%(i-2)的时候,要注意如果等于0的话,其实n是等于i-2,所以要输出f[i-2]。

还有难道循环节一定是从1 1 开始的??

 1 #include<cstdio>
 2 int f[100];
 3 int main()
 4 {
 5     //freopen("a.txt","r",stdin);
 6     int a,b,n,i;
 7     f[1]=f[2]=1;
 8     while(~scanf("%d %d %d",&a,&b,&n))
 9     {
10         if(a==0&&b==0&&n==0) break;
11         for(i=3;i<100;i++)
12         {
13             f[i]=((a*f[i-1]+b*f[i-2])%7+7)%7;
14            // printf("%I64d\n",f[i]);
15             if(f[i]==1&&f[i-1]==1)  break;
16         }
17         f[0]=f[i-2];
18         printf("%d\n",f[n%(i-2)]);
19     }
20     return 0;
21 }
时间: 2024-10-12 18:27:22

51nod 1126 求递推序列的第N项 && hdu - 1005 Number Sequence (求周期)的相关文章

1126 求递推序列的第N项(51nod)

原题链接http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126 这题我们应该先求出他的周期来..... for(i=3;i<300;i++) { f[i]=((A*f[i-1]+B*f[i-2])%7+7)%7; if(f[i-1]==1&&f[i]==1) break; }当f[i-1]==1&&f[i]==1时相当于又回到了开始,所以i-2就是他的周期 这里要注意当n%(i-2)==0时

16.有一分数序列 1/2,2/3,3/5,5/8,8/13,13/21,…求出这个序列的前200 项之和

使用向量: #include<iostream>#include<vector>using namespace std;int FenShu(int); int main(){    double sum=0,sum1=0;    for(int i=2;i<=200;i++)    {        sum1+=FenShu(i);    }    sum=sum1+0.5;    cout<<sum<<endl;    return 0;} int

2018ICPC焦作- Poor God Water 求递推式+矩阵快速幂

题目链接:https://nanti.jisuanke.com/t/31721 题意:一个孩子吃饭,有meat, fish 和 chocolate 三种食物可以选.要求连续三顿饭食物不能完全相同,鱼和肉的前一顿和后一顿不能都是巧克力,巧克力的左右两边不能同时出现鱼和肉. 思路:分九种情况,求出递推式,写出标准矩阵,用矩阵快速幂. 代码: #include <iostream> #include <stdio.h> #include <string.h> #define

hiho 1143 矩阵快速幂 求递推式

题目链接: hihocoder 1143 思路见题目上 快速幂模板: // m^n % k int quickpow(int m,int n,int k) { int b = 1; while (n > 0) { if (n & 1) b = (b*m)%k; n = n >> 1 ; m = (m*m)%k; } return b; } 题解: #include<iostream> #include<cstdio> #include<cstring

(KMP 1.1)hdu 1711 Number Sequence(KMP的简单应用——求pattern在text中第一次出现的位置)

题目: Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12902    Accepted Submission(s): 5845 Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1

HDU 1711 Number Sequence 【KMP应用 求成功匹配子串的最小下标】

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 42917    Accepted Submission(s): 17715 Problem Description Given two sequences

BM求递推式模板

#include <bits/stdc++.h> using namespace std; #define rep(i,a,n) for (long long i=a;i<n;i++) #define per(i,a,n) for (long long i=n-1;i>=a;i--) #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define fi first #def

以最快的速度求出Fibonacci 序列的第n项

题目:定义Fibonacci序列如下:f(0)=0,f(1)=f(2)=1,n>2时,f(n)=f(n-1)+f(n-2) ,输入n ,用最快的方法求该数列的第 n 项. 分析: 首先递归求法肯定都会,但是由于递推关系的形式,很容易看出里面有很多的重复计算.改进的方法也很容易想到,即申请额外的两个空间来存放保存前面的计算结果,以此来提供速度: 参考代码: 1: int getNthFibonacci(int n)  2: {   3:     int first=0,second=1;   4:

使用C语言编写程序,求解有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个序列的前20项

void test() {  //思路:找规律->从3/2开始 下一个数的分母是上一个数的分子,下一个数的分子是上一个数的分子分母之和  double mol = 2.0, den = 1.0, denlast = 0;  double div = mol / den;  double sum = 0;  int i = 0;  for (i = 0; i < 20; i++)  {   printf("%g/%g ", mol, den);//%g省去浮点数的无效0