hdoj 1865 1sting
2015-07-27 17:54
169 查看
1sting
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4157 Accepted Submission(s): 1564
[align=left]Problem Description[/align]
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.
[align=left]Input[/align]
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.
[align=left]Output[/align]
The output contain n lines, each line output the number of result you can get .
[align=left]Sample Input[/align]
3 1 11 11111
[align=left]Sample Output[/align]
1 2 8 思路:这是一道大数题,规律是斐波那契,因为要两个数相加,将这两个数都放到数组中去,因为有l=strlen(s)个数,所以用二维数组记录。 代码: [code]#include<stdio.h> #include<stdlib.h> #include<string.h> int num[300][1000]; char s[1000]; int main() { int i,n,l,len,k,j; scanf("%d",&n); while(n--) { scanf("%s",s); l=strlen(s); memset(num,0,sizeof(num)); num[1][1]=1;num[2][1]=2; len=1; for(i=3;i<=l;i++) { for(k=1;k<=len;k++) { num[i][k]=num[i][k]+num[i-1][k]+num[i-2][k]; if(num[i][k]>9) { num[i][k+1]+=num[i][k]/10; num[i][k]%=10; } if(num[i][len+1]) { len++; } } } for(i=len;i>=1;i--) { printf("%c",num[l][i]+'0'); } printf("\n"); } return 0; }
[/code]
相关文章推荐
- UVA 10420(排序检索)
- CString中Format函数与格式输入与输出
- hadoop集群安装(多机,非伪集群)
- 在32位ubuntu中安装docker并且成功启动容器
- AndroidManifest.xml - 【 manifest -> 其他次要配置】
- Problem B
- 面向对象的三大基本特征
- 移动广告名词
- errno值(linux )
- ISE中下载Xilinx的bit文件失败时的处理方案
- iOS-UI-01 UIWindow UIView
- poj 1459 多源汇网络流 ISAP
- java单点登录系统CAS的简单使用
- 【剑指offer】Q32:从1至n整1出现的次数(python)
- .net后台调用config中的标签
- AsyncTask概念的理解
- MapReduce:详解Shuffle过程
- C/C++__字符串的结束符“\0”到底是什么
- Listview 定位到哪一行
- JVM 进阶 四