读数序列: 1,11,21,1211,111221,312211
2016-04-16 12:48
513 查看
说数序列从 1 开始,然后开始读:
1 读为: 1个1,提取数字11(即为第二个数);
11 读为: 2个1,提取数字21(即为第三个数);
21 读为: 1个2、1个1,提取数字1211(即为第四个数);
1211 读为:1个1、1个2、2个1;提取数字111221(即为第四个数);
……
编程计算第n个读数序列中的数字串,用字符串表示:
编程思想:
用vector<int>存储数字串,最后将第n个求出来的数字串转化为字符串string。
从1开始,依次计算第2个、第3个、……第n个数字串。计算过程如下:
假设已计算至第n-1个数字串,记为vector<int> s1,遍历s1,统计连续出现的数字及出现次数,每统计一次,将统计结果插入数字串s2,
如111233,1连续出现3次,s2=31;
2出现1次,s2=3112;
3出现2次。s2=311223,统计结束,得到第n个数字串。
程序如下:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void print(vector<int> s){
auto it=s.begin();
while(it!=s.end()){
cout<<*it;
++it;
}
cout<<endl;
}
string vTs(vector<int> v){
string s;
auto it=v.begin();
while(it!=v.end()){
const char c=*it+'0';
s.push_back(c);
++it;
}
return s;
}
string countAndSay(int n) {
vector<int> s1={1},s2;
int i=0,j=0;
for(int k=0;k<n-1;k++){
auto it=s1.begin();
while(it!=s1.end()){
i=1;
j=*it;
++it;
while(it!=s1.end()&&*it==j){
i++;
++it;
}
s2.push_back(i);
s2.push_back(j);
}
s1=s2;
s2={};
}
return vTs(s1);
}
int main(){
cout<<countAndSay(6)<<endl;
return 0;
}
1 读为: 1个1,提取数字11(即为第二个数);
11 读为: 2个1,提取数字21(即为第三个数);
21 读为: 1个2、1个1,提取数字1211(即为第四个数);
1211 读为:1个1、1个2、2个1;提取数字111221(即为第四个数);
……
编程计算第n个读数序列中的数字串,用字符串表示:
编程思想:
用vector<int>存储数字串,最后将第n个求出来的数字串转化为字符串string。
从1开始,依次计算第2个、第3个、……第n个数字串。计算过程如下:
假设已计算至第n-1个数字串,记为vector<int> s1,遍历s1,统计连续出现的数字及出现次数,每统计一次,将统计结果插入数字串s2,
如111233,1连续出现3次,s2=31;
2出现1次,s2=3112;
3出现2次。s2=311223,统计结束,得到第n个数字串。
程序如下:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void print(vector<int> s){
auto it=s.begin();
while(it!=s.end()){
cout<<*it;
++it;
}
cout<<endl;
}
string vTs(vector<int> v){
string s;
auto it=v.begin();
while(it!=v.end()){
const char c=*it+'0';
s.push_back(c);
++it;
}
return s;
}
string countAndSay(int n) {
vector<int> s1={1},s2;
int i=0,j=0;
for(int k=0;k<n-1;k++){
auto it=s1.begin();
while(it!=s1.end()){
i=1;
j=*it;
++it;
while(it!=s1.end()&&*it==j){
i++;
++it;
}
s2.push_back(i);
s2.push_back(j);
}
s1=s2;
s2={};
}
return vTs(s1);
}
int main(){
cout<<countAndSay(6)<<endl;
return 0;
}
相关文章推荐
- Word中以交叉引用的方式插入参考文献
- C++作业3
- (LeetCode 304) Range Sum Query 2D - Immutable
- RaspberryPi2 安装系统到硬盘
- Hadoop DataNode的读和写流程 选择datanode方法 机架感知
- Twisted源码分析1
- Android下载图片
- 递推之摆动数列
- Android实现进入界面时,加载欢迎界面
- Android 基本控件的使用七(ListView+BaseAdapter)(demo)
- java学习笔记(5)
- 单链队列基本操作
- android操作sqlite数据库及心得
- hadoop深入研究:(三)——hdfs数据流 随机选节点
- Eclipse安装PyDev
- PHP数组和数组函数
- 第28章 矩阵运算
- 图的遍历:DFS和BFS算法
- 递推
- android导致VFY(verifyerror)错误的一种情况