这道题就是找循环节
#include<bits/stdc++.h> using namespace std; int a[10000][2],book[10000]; int ff(int t) { int num = 0 ; while(t) { num += t % 10; t /= 10; } return num; } int main() { int T; cin >> T; for(int u = 1; u <= T ; u ++) { int l, r; long long n ; cin >> l >> r >> n; a[1][0] = l;a[1][1] = l; a[2][0] = r;a[2][1] = l + r; for(int i = 3; i < 100 ; i ++) { a[i][0] = ff(a[i-1][0]) + ff(a[i-2][0]); a[i][1] = a[i-1][0] + a[i][0]; } //for(int i = 1; i <= 10 ; i ++) // cout << a[i][0] << " "; //cout << endl; if(n < 100) { cout << "Case #" << u << ": " << a[n][0] << endl; continue; } int s1,s2; for(int i = 1; i < 100 ; i ++) { for(int j = i + 1; j < 100 ; j ++) if(a[i][0] == a[j][0] && a[i][1] == a[j][1]) { s1 = i - 1; s2 = i; } } int num = 0,t; for(int i = 1; i < 100 ; i ++) { if(a[i][0] == a[s1][0] && a[i+1][0] == a[s2][0]) { t = i; break; } num ++; } n -= num; //cout << n << endl; num = 2; for(int i = t + 2 ; i < 100;i ++) { if(a[i][0] == a[s1][0] && a[i+1][0] == a[s2][0]) break; num ++; } //cout << num << endl; n %= num; if(n == 0 ) cout << "Case #" << u << ": " << a[s1 + num-1][0] << endl; else cout << "Case #" << u << ": " << a[s1 + n - 1][0] << endl; } return 0; }