刪除零元素

iamzxf發表於2014-11-20

    從鍵盤讀入n個整數放入陣列中,編寫函式CompactIntegers,刪除陣列中所有值為0的元素,其後元素向陣列首端移動。注意,CompactIntegers函式需要接受陣列及其元素個數作為引數,函式返回值應為刪除操作執行後陣列的新元素個數。輸出刪除後陣列中元素的個數並依次輸出陣列元素。  


樣例輸入:(輸入格式說明:5為輸入資料的個數,3 4 0 0 2 是以空格隔開的5個整數)

5
3 4 0 0 2
樣例輸出:(輸出格式說明:3為非零資料的個數,3 4 2是以空格隔開的3個非零整數)
3
3 4 2

樣例輸入

7
0 0 7 0 0 9 0

樣例輸出

2
7 9

樣例輸入

3
0 0 0

樣例輸出

0

   此題關鍵是對陣列中元素個數的控制,如何有效的處理兩個連續的0,也是演算法設計的重點。

參考程式碼如下:

#include <stdio.h>

void CompactIntegers(int a[], int n)
{
	int i,j;

	i=0;
	while(i<n)
	{
		if(a[i]==0)
		{
			for(j=i;j<n;j++)
				a[j]=a[j+1];

			n--;
		}
		else 
			i++;
		
	}

	printf("%d\n",n);
	for(i=0;i<n;i++)
		printf("%d ",a[i]);
	putchar('\n');
}

int main()
{
	int n,i;
	int *a;

	scanf("%d",&n);
	a=new int [n];
	for(i=0;i<n;i++)
		scanf("%d",a+i);

	CompactIntegers(a, n);

	return 0;
}





相關文章