我有一个数组'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? 谢谢你的时间!我很感激!
答案 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]);
}