【百度之星邀请月赛12月11号竞赛题目一】du熊学斐波那契I

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;
}


你可能感兴趣的:(【百度之星邀请月赛12月11号竞赛题目一】du熊学斐波那契I)