1
11
21
1211
111221
找出上面数列的规律,设计一个程序能输出这个数列的前N项(N=20)
解答:
数列规律:
第一行:1,没什么好说的
第二行:11,"1"个"1"
第三行:21,"2"个"1"
第四行:1211,"1"个"2"和"1"个"1"
第五行:111221,"1"个"1"、"1"个"2"和"2"个"1"
明白了吧,很简单
所以,第六行就是312211,"3"个"1"、"2"个"2"和"1"个"1"
可以证明,这个数列中不可能出现"4","3"不能连续出现等等性质
#include
<
iostream
>
using namespace std;
int main()
... {
const int max_j(1000);
const int max_i(20) ;
int arr[max_i][max_j],n(-1),i;
while (n<=0)...{
cout <<"Please input an integer(<=20):";
cin >>n;
}
for ( i=0;i !=max_i;++i)
for (int j=0;j !=max_j;++j)
arr[i][j]=0;
arr[0][0]=1;
cout <<arr[0][0]<<endl;
for ( i=1;i !=n;++i)
...{
for (int j(0),time(1),k(0);arr[i-1][j] !=0;++j)
if (arr[i-1][j]==arr[i-1][j+1])
++time;
else
...{
cout <<time<<arr[i-1][j];
arr[i][k++]=time;
arr[i][k++]=arr[i-1][j];
time=1;
}
cout <<endl;
}
system("pause");
return 0;
}
using namespace std;
int main()
... {
const int max_j(1000);
const int max_i(20) ;
int arr[max_i][max_j],n(-1),i;
while (n<=0)...{
cout <<"Please input an integer(<=20):";
cin >>n;
}
for ( i=0;i !=max_i;++i)
for (int j=0;j !=max_j;++j)
arr[i][j]=0;
arr[0][0]=1;
cout <<arr[0][0]<<endl;
for ( i=1;i !=n;++i)
...{
for (int j(0),time(1),k(0);arr[i-1][j] !=0;++j)
if (arr[i-1][j]==arr[i-1][j+1])
++time;
else
...{
cout <<time<<arr[i-1][j];
arr[i][k++]=time;
arr[i][k++]=arr[i-1][j];
time=1;
}
cout <<endl;
}
system("pause");
return 0;
}