首页 > 试题广场 > 数组元素处理
[编程题]数组元素处理
  • 热度指数:434 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有一个数组 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

输入

1
0
3
4
0
-3

输出

1 3 4 -3 0 0
思路:逐个语素遍历,发现等于零的元素则把它沉到数组末尾,其他逐个提前,这里借助一个辅助函数downFirst(),它把一个数组的首元素扔至尾部,其余逐个往前放一个位置,代码如下
#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);
    }
}

发表于 2021-12-01 19:29:47 回复(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* q=p;
    int cnt=0;
    for(int i=0;i<n;i++){
        if(*(p+i)!=0){
            
            *q=*(p+i);
            cnt++;
            q++;
        }
        
    }
    for(int i=cnt;i<n;i++){
        *q=0;
        q++;
    }

}
发表于 2021-11-25 22:44:52 回复(0)