將陣列中的0移到尾邊
Submit solution
ADA, C, C++, clang, clang++, Java 11, text, ZIG
Points:
100
Time limit:
1.0s
Memory limit:
128M
Authors:
Problem type
Allowed languages
問題簡述:
給定一個隨機內容的陣列(請先輸入陣列大小,再輸入陣列內容。),並將陣列中所有的0移至尾端。例如一個陣列:
arr[] = {1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0}
將陣列中所有的移至尾端後得到的陣列:
arr[] = {1, 9, 8, 4, 2, 7, 6, 0, 0, 0, 0}。
其中所有其他元素的順序不變。
需要完成及繳交的函式:
void pushZerosToEnd(int arr[], int n)
函式
arr
:為含有資料的陣列(也就是你要處理的陣列)。n
:則是陣列的大小。
void pushZerosToEnd(int arr[], int n) {
// 請完成並繳交本函式
}
程式樣板:
// C program to rotate an array by
// d elements
#include "array.h"
// Driver program to test above function
int main()
{
int a, n;
int arr[1000];
scanf( "%d", &n );
for( a = 0; a < n; a++ )
scanf( "%d", &arr[a] );
pushZerosToEnd(arr, n);
for( a = 0; a < n; a++ )
printf( "%d ", arr[a] );
return 0;
}
void pushZerosToEnd(int arr[], int n) {
// 你的程式碼
}
範例測資:
測資 1
輸入
11
1 9 8 4 0 0 2 7 0 6 0
輸出
1 9 8 4 2 7 6 0 0 0 0
測資 2
輸入
7
1 2 0 9 3 0 4
輸出
1 2 9 3 4 0 0
測資 3
輸入
20
0 0 0 21 23 0 76 22 0 22 0 21 74 96 0 34 54 47 23 0
輸出
21 23 76 22 22 21 74 96 34 54 47 23 0 0 0 0 0 0 0 0
測資 4
輸入
8
7 5 6 0 0 2 0 1
輸出
7 5 6 2 1 0 0 0
測資 5
輸入
10
1 3 0 0 2 0 5 0 8 9
輸出
1 3 2 5 8 9 0 0 0 0
Comments
//#include "array.h"
include <stdio.h>
void pushZerosToEnd(int arr[], int n) { int zero_cnt=0; int zero_cnt_search=0; int zero_array_num[100]={0}; for(int i=0;i < n; i++){ //printf("arr[%d]=%d\r\n",i,arr[i]); if(arr[i]==0){ zero_array_num[zero_cnt]=i; //printf("zero_array_num[%d]=%d , i=%d\r\n",zero_cnt,zero_array_num[zero_cnt],i); zero_cnt++; }else{ if(zero_cnt_search < zero_cnt){ int zero_arr_num=zero_array_num[zero_cnt_search]; arr[zero_arr_num]=arr[i]; arr[i]=0; zero_cnt_search++; i--; //because current num is zero , so we need check 0 again. / printf("changed(i=%d) = ",i); for(int a = 0; a < n; a++ ) printf( "%d ", arr[a] ); printf("\r\n"); /
} }
}
} // Driver program to test above function int main() { int a, n; int arr[1000];
/
printf("org arr="); for( a = 0; a < n; a++ ) printf( "%d ", arr[a] );/
}