http://acm.hdu.edu.cn/showproblem.php?pid=6130
给定一个数列,是
1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1……、
他是怎么来的呢。
把相邻相同的项当成一组,发现时
1 22 11 2 1 22 1 22 11 2 11 22 1
那个数组就是 (把数组这样处理之后的长度的数列)
然后就打表,打的要多点(因为实际的长度比数组的长度要长,并且最多为2倍)
#include <bits/stdc++.h>
using namespace std;
const int l=10000007;
int a[40000007];
int main()
{ a[1]=1;
int c=1;
int y=1;
for(int i=1;i<=l;i++){
if(a[i]==0){
if(a[i-1]==1) a[i]=2;
else if (a[i-1]==2) a[i]=1;
}
int x=a[i];
while(x--){
a[c++]=y;
}
if(y==1) y=2;
else if(y==2) y=1;
}
int t;
int x;
//for(int i=1;i<=100000;i++)
// cout<<a[i]<<endl;
scanf("%d",&t);
while(t--){
scanf("%d",&x);
printf("%d\n",a[x]);
}
return 0;
}

本文介绍了一个特定数列的生成算法,通过分析数列的规律并使用C++实现,展示了如何通过程序计算出数列中任意位置的值。该数列由1和2交替构成,相邻相同数字被视作一组,每组的长度构成了新的数列。
503

被折叠的 条评论
为什么被折叠?



