zoukankan      html  css  js  c++  java
  • 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("
    ");
    	}
    	return 0;
    }
  • 相关阅读:
    【原创】极简的软件功能自动化测试
    重温归并排序
    vue中嵌入echarts关系图
    KDE 应用设置开机自启
    教大聪明学Linux
    支持Windows \Linux\Mac 平台制作系统启动盘的软件
    Linux命令man文档改为中文
    在Linux上使用企业微信提供的API发送信息给成员
    数字的放重新放置 #abc>bac #取数字 / % * #三步取
    frp内网穿透
  • 原文地址:https://www.cnblogs.com/123tang/p/5832840.html
Copyright © 2011-2022 走看看