从阵列中成对打印连续条目

时间:2015-07-15 11:56:16

标签: c

我有一个数组'a'由用户插入:

printf("insert N");
scanf ("%d", &n);
printf ("insert group of numbers");
for(i=0; i<n; i++){
    scanf("%d", &a[i]);
}

然后,从原始数组中,我必须创建一个序列,其中包含原始数组的所有条目,但如果条目连续多次出现,那么不是多次写入该数字,而是只有两个数字应该是添加到序列中:首先表示重复的数字,第二个表示其频率。例如:

Array : 1,3,4,1,1,1,1,6,7,1,1,1,1,1,1,9,3,2,5,6,1,2,1,1,1,1,1.
Sequence: 1,3,4,1,4,6,7,1,6,9,3,2,5,6,1,2,1,5

前3个数字按原样记录下来。然后'1'连续出现4次,所以我们在序列中附加1,4,依此类推。

实际上我很困惑我怎么能让i和j在同一个台阶上, 据我所知,我和j从0开始,然后是1,2,3,4 但是我怎么能让它们在同一步骤中开始,所以如果[i(步骤中为3)] = 10 那么[j(步骤3)也是10? 谢谢你的时间!我很感激!

1 个答案:

答案 0 :(得分:0)

以下代码将完成这项工作。

#include<stdio.h>
#include<stdlib.h>
void main()
{
    int i,x,j=0,n,*a,*b;
    printf("insert N");
    scanf ("%d", &n);
    a=(int *)malloc(n*sizeof(int));
    b=(int *)malloc(n*sizeof(int));
    printf ("insert group of numbers");
    for(i=0; i<n; i++)
    scanf("%d", &a[i]);
     for( i=0;i<n;++i)
     {
        x=0;
            while((i+1)<n&&a[i]==a[i+1])
            {
                ++x;
                ++i;
            }
            if(x>1)
            {
             b[j++]=a[i];
             b[j++]=x+1;
            }
            else b[j++]=a[i];
     }
    for(i=0;i<j;++i)
        printf("%d  ",b[i]);

}