有一个数组 int arr[n],要求写一个函数:void func(int *p, int n);将数组 arr 中为 0 的元素都移至数组末尾,将非 0 的元素移至开始(保持原来的顺序不变)。
例如:
数组中元素原来是:1 0 3 4 0 -3 5
经过 func 处理后:1 3 4 -3 5 0 0
键盘输入 6 个整数,保存到数组中
经过 func 处理后数组的元素,元素和元素之间使用空格隔开例如:1 3 4 -3 5 0 0
1 0 3 4 0 -3
1 3 4 -3 0 0
void func(int* p, int n) { // write your code here...... int a = 0; // 指针增量 for(int i = 0; i < n; i++){ if(*(p + i) != 0){ *(p + a) = *(p + i); a++; } } // 末尾补0 for(int i = a; i < n; i++){ *(p + i) = 0; } }
#include <iostream> using namespace std; void func(int* p, int n); int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int* p, int n) { // write your code here...... // p, q 分别为头尾指针 int* q = p + n - 1; while(p < q) { if(*p != 0) p++; else { // p + 1 至 q 的元素向前移 for(int* r = p; r < q; r++) *r = *(r + 1); *q = 0; // 尾指针右移 q--; } } }
#include <iostream> using namespace std; void func(int* p, int n); int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } //辅助函数downFirst(),它把一个数组的首元素扔至尾部,其余逐个往前放一个位置 void downFirst(int a[],int n){ int temp=a[0]; for(int i=0;i<n-1;i++){ a[i]=a[i+1]; } a[n-1]=temp; } //逐个语素遍历,发现等于零的元素则把它沉到数组末尾,其他逐个提前 void func(int* p, int n) { for(int i=0;i<n;i++){ if(p[i]==0) downFirst(p+i,n-i); } }
#include <iostream> #include <type_traits> using namespace std; void func(int* p, int n); int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int* p, int n) { // write your code here...... int* slow = p; int* pend = p + n; while (p < pend) { if (*p != 0) { std::swap(*slow, *p); ++slow; } ++p; } }
#include <bits/stdc++.h> #include <iostream> using namespace std; void func(int* p, int n); int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int* p, int n) { // write your code here...... int arr[6],cnt = 0; for(int i = 0; i < n; i++){ if(*(p+i) != 0){ *(arr + cnt) = *(p+i); cnt ++; } } while(cnt < n){ *(arr + cnt) = 0; cnt ++; } for(int i = 0; i < n; i++){ *(p+i) = *(arr+i); } }
#include <iostream> using namespace std; void func(int* p, int n); int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int* p, int n) { // write your code here...... int b[6]; int g=0; for(int i=0;i<6;i++){ if(p[i]!=0){ b[i-g]=p[i]; } if(p[i]==0){ g++; b[6-g]=0; } } for(int i=0;i<6;i++){ p[i]=b[i]; } }
#include <iostream> using namespace std; void func(int* p, int n); int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int* p, int n) { // write your code here...... int slow=0;int fast=0; for(;fast<n;fast++) { if(*(fast+p)!=0) { p[slow]=p[fast]; slow++; } } for(;slow<n;slow++) { p[slow]=0; } }
#include <iostream> using namespace std; void func(int* p, int n); int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int* p, int n) { // write your code here...... int count = 0; int Arr[n]; int i = 0,j = 0; for(i = 0; i < n; ++i){ if(p[i]==0){ count++; }else{ Arr[j++] = p[i]; } } for(j = n-count; j < n; ++j){ Arr[j] = 0; } for(i = 0; i < n; ++i){ p[i] = Arr[i]; } }
#include <iostream> using namespace std; void func(int* p, int n); int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int* p, int n) { // write your code here...... int j = 0; for(int i=0;i<=6;i++){ for(j=i;j<=6;j++){ if(p[j] == 0){ swap(p[j],p[j+1]); } } } }直接遍历数组,交换0和后一个数的次序……
#include <iostream> using namespace std; void func(int* p, int n); int main() { int *arr = new int[6]; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { cout<<arr[i] <<" "; } delete [] arr; return 0; } void func(int* p, int n) { // write your code here...... for(int i = 0;i<n - 1; i++) //冒泡升序 确定轮数 { for(int j = 0;j<n-i-1;j++) //确定每轮中比较的次数 { if(p[j]==0) { int temp = p[j]; p[j] = p[j+1]; p[j+1] = temp; } } } }
#include <any> #include <iostream> using namespace std; void func(int* p, int n) ; int main() { int arr[6] = { 0 }; for (int i = 0; i < 6; i++) { cin >> arr[i]; } func(arr, 6); for (int i = 0; i < 6; i++) { if (i == 5) { cout << arr[i] << endl; } else { cout << arr[i] << " "; } } return 0; } void func(int* p, int n) { // write your code here...... for (int i = 0; i < n; i++) { if (p[i] == 0) { for(int j =i;j<n;j++) { p[j] =p[j+1]; } p[n-1] =0; } } }
#include <iostream> using namespace std; void func(int* p, int n) { /*j记录末尾元素0要存放的位置*/ int j = n - 1; for (int i = 0; i < n; i++) { if (p[i] == 0) { for (int k = i; k < j; k++) { p[k] = p[k + 1]; } /*存放0*/ p[j] = 0; /*下一个要存放0的位置前移*/ j--; /*因为末尾有存放0的情况,所以已经存放0的部分不再判断,n需要变化*/ n = j + 1; } } } int main() { int arr[100]; int i = 0; int n; while (cin >> n) { arr[i] = n; i++; } func(arr, i); for (int j = 0; j < i; j++) { cout << arr[j] << " "; } } // 64 位输出请用 printf("%lld")