• YYHS-数列


    题目描述

    已知a[1],a[2]
    a[i]=abs(a[i-1]-a[i-2])  (i>=3)
    问数列中出现了多少种不同的数。

    样例输入

    3 5

    样例输出

    5

    提示

     

    题解

    这道题给你a[1],a[2],要你求数列中有多少种不同的数
    通过几个数据的手算不难发现a[1]和a[2]互换 答案是一样的
    具体答案就是一个辗转相除法,我们可以用dfs来做
    每次ans+=x/y;(x>y)
     
    然后判断x%y==0(当a[i]==0的时候数列中的数才不会重复)else dfs(y,x%y);
    最后输出ans+1即可(为什么要加一因为刚开始的时候你没有加上a[1])
     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 ll n,m,ans;
     5 void dfs(ll a,ll b){
     6     ans+=a/b;
     7     if (!(a%b)) return; else dfs(b,a%b); 
     8 }
     9 int main(){
    10     scanf("%lld%lld",&n,&m);
    11     if (n<m) swap(n,m);
    12     dfs(n,m);
    13     printf("%lld
    ",ans+1);
    14     return 0;
    15 }
    View Code
  • 相关阅读:
    解决winXP无法远程桌面连到win8
    Exception处理
    Java父类与子类的内存引用讲解
    JAVA子类继承父类
    JAVA子类调用父类构造方法
    JS 矩阵转置
    JS 二分查找
    JS冒泡排序
    JS 求平均值
    关于STM32 NVIC配置的解释
  • 原文地址:https://www.cnblogs.com/zhuchenrui/p/7552708.html
Copyright © 2020-2023  润新知