输出字符串Count and Say
最近研究输出字符串,稍微总结一下,以后继续补充:
标题如下:
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...
1
is read off as "one 1"
or 11
.
11
is read off as "two 1s"
or 21
.
21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
分析:题意是n=1时输出字符串1;n=2时,数前次字符串中的数值个数,因为前次字符串有1个1,所以输出11;n=3时,由于前次字符是11,有2个1,所以输出21;n=4时,由于前次字符串是21,有1个2和1个1,所以输出1211;顺次类推。
此题我没有找到数学律规,且暂就用最简略的法想做,关键是考核string的作操。
码代如下:
string numbertostring(int & num)
{
string tmp;
if(num<=9)
{
tmp.push_back(num + '0');
}
else
{
vector<int> over10num;
while(num>0)
{
over10num.push_back(num%10);
num = num/10;
}
int len_num = over10num.size();
for(int k=len_num-1;k>=0;--k)
{
tmp.push_back(over10num[k] + '0');
}
}
return tmp;
}
string countAndSay(int n) {
string s;
if(n<=0)return s;
s.push_back('1');
int number=1;
while(number!=n)
{
string tmp;
int length = s.length();
for(int i=0;i<length;)
{
int num=1,j=i+1;
while(j<length&&s[j]==s[i])
{
num++;
j++;
}
tmp+=numbertostring(num);
tmp+=s[i];
i=j;
}
number++;
s=tmp;
}
return s;
}
文章结束给大家分享下程序员的一些笑话语录:
据说有一位软件工程师,一位硬件工程师和一位项目经理同坐车参加研讨会。不幸在从盘山公路下山时坏在半路上了。于是两位工程师和一位经理就如何修车的问题展开了讨论。
硬件工程师说:“我可以用随身携带的瑞士军刀把车坏的部分拆下来,找出原因,排除故障。”
项目经理说:“根据经营管理学,应该召开会议,根据问题现状写出需求报告,制订计划,编写日程安排,逐步逼近,alpha测试,beta1测试和beta2测试解决问题。”
软件工程说:“咱们还是应该把车推回山顶再开下来,看看问题是否重复发生。”