百度之星du熊学斐波那契I-C++实现
最近看到百度之星2012-12-11号的竞赛题目,觉得好玩,实现了C++版的。代码问题,欢迎指正。
题目如下。
http://star.baidu.com/index.php?r=home/detail&id=2
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
Hint
对于第一、二组数据,串为112358134711235......
对于第三组数据,串为14591459145914......
代码实现
实现代码dubear.cpp,为了方便查看,实现的时候把字符串也打印了一下,这点与题目要求不同。
编译器g++,系统环境Ubuntu。
#include <iostream>
#include <sstream>
#include <string>
#include <vector>using namespace std;struct InputParam
{InputParam():a(-1),b(-1),n(-1){}int a;int b;long n;
};int main()
{int T = -1;cin>>T;if(T<1 || T> 1000){cout<<"please input number between 1~1000"<<endl;return 0;}//input paramvector<InputParam> vInput;for(int i=0; i<T; i++){InputParam param;cin>>param.a;cin>>param.b;cin>>param.n;vInput.push_back(param);}int nGroup = 0;vector<InputParam>::iterator vIter = vInput.begin();for(; vIter != vInput.end(); ++vIter){++nGroup;//check paramInputParam param = *vIter;if( param.a<0|| param.b<0 || param.b>=10|| param.n<=0 || param.n>1000000000){cout<<"Case #"<<nGroup<<": wrong param"<<endl;continue;}int nResult = -1;int nSumA = param.a;int nSumB = param.b;long nLastLen = 0;//output full stringcout<<nSumA<<nSumB;while(true){int nSumNum = nSumA + nSumB;cout<<nSumNum;//int to stringstringstream sTempStream;sTempStream<<nSumA<<nSumB<<nSumNum;string sTempValue;sTempStream>>sTempValue;int nTempLen = sTempValue.length();int nRelPos = param.n-nLastLen;if(nRelPos <= nTempLen){nResult = sTempValue[nRelPos-1]-48;break;}else{nSumA = sTempValue[nTempLen-2]-48;nSumB = sTempValue[nTempLen-1]-48;nLastLen += nTempLen;nLastLen -= 2;}}cout<<endl;//ouput resultcout<<"Case #"<<nGroup<<": "<<nResult<<endl;}return 1;
}
运行结果
usr@ubuntu:~/mydir/baidu$ ./dubear
3
1 1 2
1 1 8
1 4 8
112
Case #1: 1
11235813
Case #2: 3
14591459
Case #3: 9
百度之星du熊学斐波那契I-C++实现相关推荐
- 2018百度之星度度熊学队列
使用stl中的list就可以了,不知道为啥用reverse会wa,只能是一个个的插入list了,索幸没有超时. 代码: #include <iostream> #include <l ...
- 斐波那契数列问题的解决方法—函数递归部分
分享给大家斐波那契数列问题的解决主要是进行一下递归和循环的比较,补充一下在函数中的一些知识. 我们先上定义吧: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多 ...
- 七种方式求斐波那契(Fibonacci)数列通项
一:递归实现 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. 二:数组实现 空间复杂度和时间复杂度都是0(n),效率一般,比递归来得快. ...
- 斐波那契数与二分法的递归与非递归算法及其复杂度分析
1. 什么是斐波那契数? 这里我借用百度百科上的解释:斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏 ...
- 数据结构与算法分析:斐波那契堆
参考 斐波那契堆(二)之 C++的实现 和 斐波那契堆的C++实现,可参考视频 [B站首发]来学斐波那契堆吧♪(^∀^●) 势函数的作用:得到进行一次操作的代价和势函数的变化关系:costi=Δϕ+k ...
- 用php递归求fibonacci数列,C++_C语言求Fibonacci斐波那契数列通项问题的解法总结,一:递归实现使用 - phpStudy...
C语言求Fibonacci斐波那契数列通项问题的解法总结 一:递归实现 使用公式f[n]=f[n-1]+f[n-2],依次递归计算,递归结束条件是f[1]=1,f[2]=1. 二:数组实现 空间复 ...
- 【趣学算法】神奇的兔子序列(斐波那契数列)
14天阅读挑战赛 努力是为了不平庸~ 算法学习有些时候是枯燥的,这一次,让我们先人一步,趣学算法!欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算 ...
- python求斐波那契数列前20项和、每隔5个数空一行_输出斐波那契数列的前20项(每行5个数)_学小易找答案...
[单选题]The Third State Bank of Laramie has opened an office in Morocco. This office does not take depo ...
- 趣学算法之斐波拉契数列实现
1.斐波拉契数列 f(1) = 1; f(2) = 1; f(3) = f(1) + f(2);以此内推1 x = 1 f(x) = 1 x = 2f(x - 1) + f(x - 2) x > ...
最新文章
- Hadoop源码分析-Text
- mysql 硬盘空间不够_mysql磁盘空间不足的查排
- boost::inplace_merge相关的测试程序
- 部署Small Business Server 2003服务器之一
- 五分钟没有操作自动退出_消防设施操作员 精选练习题10.31
- 转Java调用C/C++编写的第三方dll动态链接库(非native API)--- JNI
- java网络编程基础——TCP网络编程三
- 从来不流鼻涕php没有毛病,睡觉的时候为什么不会流鼻涕?
- 现代化SharePoint经典网站
- web项目运行时无法重命名MySQL表问题排查
- 程序员增加收入的几种方法
- 将r中的数据导出为excel文件
- tekton入门 - 起步
- Python跟孩子一起学编程之一
- camera sensor简单曝光原理
- 【云原生微服务>SCG网关篇十二】Spring Cloud Gateway集成Sentinel API实现多种限流方式
- 亚马逊无货源店群ERP系统 无限开代理 OEM贴牌
- DirectX9.0 入门手册(6)
- nginx报错worker_processes directive is duplicate
- skin卓沿护肤品怎么样_卓沿这个品牌怎么样 卓沿适合什么年龄