嵌入式机考笔试之C语言数组问题
题目要求:
有一个整形数组buff[N],buff[N+1]描述buff[N],其中buff[0]=1;
buff[1]用来描述buff[0],buff[1]=11,从左往右表示buff[0]中有1个1;
buff[2]用来描述buff[1] ,buff[2]=21,从左往右表示buff[1]中有2个1
buff[3]用来描述buff[2] , buff[3]=1211,从左往右表示buff[2]中有1个2,1个1;
buff[4]用来描述buff[3] ,buff[4]=111221,从左往右表示buff[3]中有1个1,1个2,2个1;
输入N,0<=N<=25;
输入示例:
输入:
1
输出:
11
从左往右表示buff[0]中有1个1;
输入:
2
输出:
21
从左往右表示buff[1]中有2个1
输入:
3
输出:
1211
从左往右表示buff[2]中有1个2,1个1;
输入:
4
输出:
111221
从左往右表示buff[3]中有1个1,1个2,2个1;
示例代码:
#include <stdio.h>
int main()
{
int buff[1024]={1};//buff[0]=1
int len=1;
int new_buff[1024]={0};
int new_len=0;
int cnt=0;
int i=0;
while(scanf("%d",&cnt)!=EOF)//请求输入N
{
buff[0]=1;//起始值buff[0]=1
len=1;
if(cnt==0)//N=0时,输出则为1
{
len=1;
buff[0]=1;
}
else
{
int j,k;
int sum=1;
new_len=0;
for(i=0;i<cnt;i++)
{
for(j=0;j<len;)
{
for(k=j+1;k<len;k++)//计算有几个连续相同的数
{
if(buff[j]!=buff[k])break;
sum++;
}
new_buff[new_len++]=sum;
new_buff[new_len++]=buff[j];
j+=sum;//判断下一个
sum=1;
}
if(new_len>0)
{
for(j=0;j<new_len;j++)
{
buff[j]=new_buff[j];
len=new_len;
}
}
new_len=0;
}
}
for(i=0;i<len;i++)//输出结果
{
printf("%d",buff[i]);
}
printf("\n");
}
}
测试结果: