给大家推荐个靠谱的公众号程序员探索之路,大家一起加油
光棍的yy
时间限制:1000 ms | 内存限制:65535 KB
难度:2
描述
yy经常遇见一个奇怪的事情,每当他看时间的时候总会看见11:11,这个很纠结啊。
现在给你m个1,你可以把2个1组合成一个2,这样就不是光棍了,问这样的组合有多少种??
例如(111 可以拆分为 111 12 21 有三种)
输入
第一行输入一个n表示有n个测试数据
以下n行,每行输入m个1
(1 <= n,m <= 200)
输出
输出这种组合种数,占一行
样例输入
3
11
111
11111
样例输出
2
3
8
来源
上传者
<span style="color:#000000;BACKGROUND-COLOR: #ffffff">#include <iostream>//c++头文件
#include <string>//
#include <cstdio>//
using namespace std;
</span>string sum(string s1,string s2)//c++的字符串比c语言的字符数组方便多了
{
if(s1.length()<s2.length())//s1.length()求得的是字符串的长度
{
string temp=s1;
s1=s2;
s2=temp;
}
int i,j;
for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--)
{
s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0));//注意细节
if(s1[i]-'0'>=10)//超过10
{
s1[i]=char((s1[i]-'0')%10+'0');
if(i) s1[i-1]++;
else s1='1'+s1;
}
}
return s1;//返回s1
}
int main()
{
int n,T;
scanf("%d",&T);//输入几组
while(T--)
{
string s;cin>>s;//输入字符串
if(s.size()==1){//1的情况
printf("1\n");continue;
}
else if(s.size()==2)//2的情况
{
printf("2\n");continue;
}
string ans,a="1",b="2";//其他情况
for(int i=3;i<=s.size();i++)
{
ans=sum(a,b);
a=b;
b=ans;
}
cout<<b<<endl;
}
return 0;
}