这是Kolakosiki序列:1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1 …… 该序列由1和2组成,其第一项等于1。此外,如果将相邻的相同数字视为一组,则将获得1,22,11,2,1,22,1,22,11,2,11,22,1…… 计算每组数字的数量,您将获得序列本身。 所以,序列可以唯一确定。 求其第n(1≤n≤1e7)个元素的值。
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<int> k;
//前三个元素确定为“122”
k.push_back(1);
k.push_back(2);
k.push_back(2);
int s;
for(int i=2;i<7500000;i++){
//根据当前位的值和当前序列最后一位的值对序列进行延拓
s=k.size()-1;
if(k[i]==1){
if(k[s]==1){
k.push_back(2);
}else{
k.push_back(1);
}
}
if(k[i]==2){
if(k[s]==1){
k.push_back(2);
k.push_back(2);
}else{
k.push_back(1);
k.push_back(1);
}
}
}
cout<<"序列示例(前一百项):"<<endl;
for(int i=0;i<100;i++)
cout<<k[i];
cout<<endl;
int t;
cout<<"输入总的查找个数:"<<endl;
cin>>t;
int a[t],n=0;
cout<<"依次输入要查找的序号:"<<endl;
while(t--){
cin>>a[n++];
}
for(int i=0;i<n;i++)
cout<<"序列第"<<a[i]<<"位是:"<<k[a[i]-1]<<endl;
return 0;
}