牛客第十场B 咖啡鸡

听着就很饿的题目。。。

运用递归的思想 去推 一开始我用了奇奇怪怪的函数 比如strcat() 去粘起来 然后发现这个函数好像只能用两三次。。

后来就学习别人的思路——递归 做了

 1 #include<bits/stdc++.h>
 2 typedef long long ll;
 3 using namespace std;
 4 const ll inf=1e12+10;
 5 string s1="0COFFEE";
 6 string s2="0CHICKEN";
 7 ll s[1005];
 8 char findd(ll n, ll k)
 9 {
10     if(n==1) return s1[k];
11     if(n==2) return s2[k];
12     if(k>s[n-2]) return findd(n-1,k-s[n-2]);
13     if(k<=s[n-2]) return findd(n-2,k);
14 }
15 int main()
16 {    
17     s[1]=6,s[2]=7;
18     for(int i=3;i<=500;i++)
19     {
20         s[i]=min(inf,s[i-2]+s[i-1]);//min要俩个同类型的
21     }
22     ll T,n,k;
23     cin >> T;
24     while(T--)
25     {
26         cin >> n >> k;
27         for(ll i=k;i<k+10&&i<=s[n];i++)//i有两个条件 少了任一个都不能AC
28         {
29             cout <<findd(n,i);
30         }
31         cout << endl;
32     }
33     return 0;
34 } 

递归只要细心应该挺好推的~

原文地址:https://www.cnblogs.com/xyishere/p/11383741.html