zoukankan      html  css  js  c++  java
  • 蓝桥杯训练系统 1 数列

    题意描述:
    Fibonacci数列 的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
    当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
    输入包含一个整数n,输出包含一个整数,表示fn除以10007的余数,n(1<=n<=1000000)
    解题思路:
    类似于把余数轮番相加当余数凑够10007的倍数则自动消去。
    代码实现:
     1 #include<stdio.h>
     2 #define N 1000000
     3 int main()
     4 {
     5  int f[N],n,i,t=0;
     6  
     7  scanf("%d",&n);
     8  
     9  f[0]=f[1]=1;
    10  
    11  for(i=2;i<n;i++)
    12  {
    13   f[i]=(f[i-1]+f[i-2])%10007;
    14  }
    15  
    16  printf("%d
    ",f[n-1]);
    17  
    18  return 0;
    19  } 

    自己提交的内存太大,浪费时间。查找网上答案之后发现一种表达较大数的格式。
     
     1 #include<stdio.h>
     2 int dg(int n)
     3 {
     4  int s;
     5  if(n==0||n==1) s=1;
     6  else
     7   return s=dg(n-1)+dg(n-2);
     8  return s;
     9 }
    10 int main()
    11 {
    12  unsigned long s=0,a=dg(21),b=dg(22),i,n;
    13  
    14  scanf("%d",&n);
    15  
    16  if(n<20) printf("%d
    ",dg(n-1));
    17  
    18  else 
    19  {
    20   for(i=23;i<n;i++)
    21   {
    22    s=(a+b)%10007;
    23    a=b;
    24    b=s;//这里将余数直接加进去减少了运算量,因为没有被算进去的一定不到10007的倍数,所以只计算余数不影响。 
    25    } 
    26     printf("%d
    ",s);
    27    }  
    28   
    29    
    30    return 0;
    31 }
     
     
  • 相关阅读:
    Selenium WebDriver
    Xpath常用语法
    firefox插件
    Echarts图中datazoom的相关配置
    js获取当前年月日
    echarts饼图角度起始角度位置和生长方向
    jS获取table表格任意单元格值
    jquery中 cache: true和false的区别
    Ajax请求中的async:false/true的作用 、cache: true和false的区别
    Cocos Creator set get
  • 原文地址:https://www.cnblogs.com/yuanqingwen/p/10457496.html
Copyright © 2011-2022 走看看