Problem Description
du熊對數學一直都非常感興趣。最近在學習斐波那契數列的它,向你展示了一個數字串,它稱之為“斐波那契”串:
11235813471123581347112358........
聰明的你當然一眼就看出了這個串是這麼構造的:
1.先寫下兩位在0~9範圍內的數字a, b,構成串ab;
2.取串最後的兩位元字相加,將和寫在串的最後面。
上面du熊向你展示的串就是取a = b = 1構造出來的串。
顯然,步驟1之後不停地進行步驟2,數字串可以無限擴充。現在,du熊希望知道串的第n位是什麼數字。
Input
輸入資料的第一行為一個整數T(1 <= T <= 1000), 表示有T組測試資料;
每組測試資料為三個正整數a, b, n(0 <= a, b < 10, 0 < n <= 10^9)。
Output
對於每組測試資料,輸出一行“Case #c: ans”(不包含引號)
c是測試資料的組數,從1開始。
Sample Input
3
1 1 2
1 1 8
1 4 8
Sample Output
Case #1: 1
Case #2: 3
Case #3: 9
這個題比賽的時候想複雜了,開始用了個字串加斐波那契數的模板,結果STRING技術不到家,死活不出數。。。後來,發現簡單的類比就能過。。。最近總是把各種簡單類比想複雜。。
因為加起來無非就是兩種情況(確切來說是三種):
1、A,B都是0,OK 全是0
2、A,B加起來的是一位元,這樣,A=原來的B,B=加起來的和。
3、A,B加起來的是兩位元,這樣,A=1(兩個一位元加起來一定是十幾),B=和-10.
很簡單的幾行,讓我想了許久,ORZ...
#include <iostream>#include <string>#include <stdio.h>using namespace std;int main(){int a,b,c;int n,tar;char res;cin>>tar;for(int w=1;w<=tar;w++){string searchpack;cin>>a>>b>>c;if(a==0 && b==0){res='0';}searchpack+=(a+'0');searchpack+=(b+'0');for(int i=0;i<=c;i++){int tmp=a+b;if(tmp>=10){searchpack+='1';int songshu=tmp-10;searchpack+=(songshu+'0');a=1;b=songshu;}if(tmp<10){a=b;b=tmp;searchpack+=(tmp+'0');}}//cout<<searchpack<<endl;cout<<"Case #"<<w<<":"<<searchpack[c-1]<<endl;}return 0;}