嵌入式机考笔试之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};
int len=1;
int new_buff[1024]={0};
int new_len=0;
int cnt=0;
int i=0;
while(scanf("%d",&cnt)!=EOF)
{
buff[0]=1;
len=1;
if(cnt==0)
{
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");
}
}
?测试结果:
|