代码如下
#include "stdio.h"
void output_squence(int n);
int num[50][50] = { 0 }; //初始化数组
int squence[200];
int n = 8; //行数
int count = 1; //计数
int count_calc = 0; //对上一行描述的数总在偶数位
int count_fact = 1; //上一行被描述的数字总在奇数位
int main(void)
{
/*
1
1 1
2 1
1 2 1 1 此行对上一行描述为 1个2,1个1,那么组合起来就是 1 2 1 1 其中上一行数字 2
和1 在此行1,3位置(奇数)
1 1 1 2 2 1
*/
num[0][0] = 1; //第一行为1
for (int i = 0; i < n; i++) //从第一行开始判断
{
for (int j = 0;num[i][j]!=0; j++) //当每一行出现数字0,表示这一行判断结束(此前对数组初始化为0,而数列又里面不可能出现0)
{
if (num[i][j] == num[i][j + 1]) //目前的数字和下一个数字相同计数加一
{
count += 1;
}
else //不相同
{
num[i + 1][count_calc] = count; //将计数放在计数位
num[i + 1][count_fact] = num[i][j]; //被计数放在偶数位
count_calc += 2; //这里位置和计数要更新和清0
count_fact += 2;
count = 1;
}
}
count_calc = 0;
count_fact = 1;
count = 1; //这里加不加都一样,因为每行判断结束时总要执行一次 else
}
count = 0;
//输出
for (int i = 0; i < n; i++)
{
for (int j = 0; num[i][j] != 0; j++)
{
printf("%d ", num[i][j]);
squence[count] = num[i][j]; //这里将数组num整合成了一个数列 可以直接输出第几项(每个数字作为一项)
count += 1;
}
printf("\n");
}
printf("\n");
printf("\n");
//这里将每一行作为一项,(这里只是将数字在格式上拼在一起,你可以将每一行组合成一个数字)
for (int i = 0; i < n; i++)
{
for (int j = 0; num[i][j] != 0; j++)
{
printf("%d", num[i][j]);
}
printf(", ");
}
printf("\n");
printf("\n");
printf("%d", squence[13]);
printf("\n");
printf("\n");
output_squence(4); //输出组合后的项
return 0;
}
void output_squence(int n)
{
for (int j = 0; num[n][j] != 0; j++)
printf("%d", num[n][j]);
}