hduoj 1865 1string 【大数】【菲波那切数列】

1sting

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 5310    Accepted Submission(s): 2030

Problem Description

You will be given a string which only contains ‘1’; You can merge two adjacent ‘1’ to be ‘2’, or leave the ‘1’ there. Surly, you may get many different results. For example, given 1111 , you can get 1111, 121, 112,211,22. Now, your work is to find the total number of result you can get.

Input

The first line is a number n refers to the number of test cases. Then n lines follows, each line has a string made up of ‘1’ . The maximum length of the sequence is 200.

Output

The output contain n lines, each line output the number of result you can get .

Sample Input

3
1
11
11111

Sample Output

1
2
8

【思路】1 先求题意,我们发现是s[1]=1,s[2]=2, 其余的 n>=3 时s[n]=s[n-1]+s[n-2];                
       2 此题最长的列为200,所以轻轻松松就超出int ,long long的范围,我们要改用数组a[205][102],来存储每一位上的数字,(前者[205]记录输入的1的个数,后者[102]记录结果的每一位)。

AC代码:

#include<stdio.h>
#include<string.h>
int a[205][102];
//注意此处要比底下函数中的j的最大值开的大一点
void count()
{
	int i,j,p,q;
	memset(a,0,sizeof(a));//数组清零
	a[1][0]=1;a[2][0]=2;
	for(i=3;i<203;i++)
    //以下步骤模拟大数计算,初始化斐波那契数列
	{
		p=q=0;
		for(j=0;j<=100;j++)
		{
			p=a[i-1][j]+a[i-2][j]+q;
			a[i][j]=p%10;
			q=p/10;
		}printf("  %d  ",a[i][0]);
	}
}
int main()
{
	count();
	int n,i,j,len;
	char s[205];
	scanf("%d",&n);
	while(n--)
	{
		getchar();
		scanf("%s",s);
		len=strlen(s);
		for(i=100;i>=0;i--)//找到数值的最后一位
		    if(a[len][i]!=0)
		       break;
		for(j=i;j>=0;j--)
          // 注意上面的函数计算的值的数位是逆序的
		   printf("%d",a[len][j]);
		printf("\n");
	}
	return 0;
}
时间: 2024-10-12 21:45:33

hduoj 1865 1string 【大数】【菲波那切数列】的相关文章

js实现菲波那切数列的两种常用方法

菲波那切数列即:1 1 2 3 5 8......,后面的数字是前面两个数字的和,并且第一个,第二个数字都是1,用js实现 的两种方法,一种通过常用的递归调用,第二种不通过递归,而是通过强大的闭包实现. 1.递归实现 // fab 1 1 2 3 5 8 function fab(num) { if(num==1 || num==2){ return 1; }else{ return fab(num-1)+fab(num-2); } } alert(fab(5)) 2.闭包实现.闭包主要在于:1

菲波纳切数列

写一个函数,输入n,求斐波那契数列(Fibonacci)数列的第n项.斐波那契数列定义如下: 当n=0时,f(n)=0;当n=1时,f(n)=1;当n>1时,f(n)=f(n-1)+f(n-2). 效率很低的解乏,挑剔的面试官不会喜欢. public int fibo(int n){ if(n<=0) return 0; if(n==1) return 1; return fibo(n-1)+fibo(n-2); } 我们以求解f(10)为例来分析递归的求解过程.想求得f(10),需要先求的f

hduoj 1848 Fibonacci again and again【sg函数】【博弈】【菲波那切数列】

Fibonacci again and again Description 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F(n-2)(n>=3); 所以,1,2,3,5,8,13--就是菲波那契数列. 在HDOJ上有不少相关的题目,比如1005 Fibonacci again就是曾经的浙江省赛题. 今天,又一个关于Fibonacci的题目出现了,它是一个小游戏,定义如下: 1.  这是

菲波那切数列

一个数组:1,1,2,3,5,8,13,21...+m: static void Main(string[] args) { Console.Write("输入想求的斐波那契数列项数:"); int n = Convert.ToInt32(Console.ReadLine()); //递归实现 Console.WriteLine("斐波那契数列数列递归算出的第{0}项为:{1}", n, Calculate(n)); } static int Calculate(i

BestCoder Round #71 (div.2) (hdu 5620 菲波那切数列变形)

KK's Steel Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 350    Accepted Submission(s): 166 Problem Description Our lovely KK has a difficult mathematical problem:he has a N(1≤N≤1018) meters s

php实现菲波那切数列和杨辉三角

1.递归  显示斐波那契数列 <?PHP function recursion($num){ //判断是否小于0 if($num<0){ return -1; } if($num==1){ return 0; } if($num==2 || $num==3){ return 1; } return recursion($num-1)+recursion($num-2); } //循环显示 for($i=1;$i<=20;$i++) { $str .= ',',recursion($i);

带有记忆的菲波那切数列

public static int Fib(int n) { int q=0; int []r=new int[n+1]; r[0]=1; r[1]=1; for(int j=2;j<=n;j++) { r[j]=r[j-1]+r[j-2]; } return r[n]; }

leetcode70 C++ 4ms 爬楼梯 菲波那切数列

class Solution { public: int climbStairs(int n) { int a = 1; int b = 1; int temp; while(n>0){ n--; temp = a; a = b; b += temp; } return a; } }; 原文地址:https://www.cnblogs.com/theodoric008/p/9413343.html

斐波那切数列

从变盘日期上看,周三是本轮下跌的最高点2334点下跌以来的第13个交易日,恰好符合了菲波那切变盘时间窗口的神奇数字.下面我简要的介绍一下什么是菲波那切时间变盘窗口.天行有常,世间万物变化有律.股票犹如人的生命一样,是处在二三十岁的青壮年期,还是处在七八十岁的古稀.耄耋之年?让我们运用菲波那切数列时间窗口来判断大盘的涨跌周期.我们首先介绍一下菲波那切数列,我们在中学上数学课时,老师曾讲过菲波那切数列. 1,1,2,3,5,8,13,21,34,55,89,144,233…这一组数字从第三项起,每一