列表

详情


CPP30. 数组元素处理

描述

有一个数组 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

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 312KB, 提交时间: 2022-02-10

#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) {
    for(int i=0;i<n;i++){
    if(p[i]==0){
        for(int j=i;j<n-1;j++){
            p[j]=p[j+1];}
            p[n-1]=0;
           n--;
            
        }
    }
    }
    // write your code here......
    

C++ 解法, 执行用时: 2ms, 内存消耗: 384KB, 提交时间: 2022-02-09

#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 w=0;
    for(int i=0;i<n;i++)
    {
        if(*(p+i)==0)
        {
            w++;
        }
    }
    for(int i=0;i<n;i++)
    {
        if(*(p+i)==0)
        {
            for(int j=i;j<n-1;j++)
            {
                *(p+j)=*(p+j+1);
            }
        }
    }
    for(int i=n-1;i>n-w-1;i--)
    {
        *(p+i)=0;
    }

}

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2022-02-08

#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 tmp;
    for(int i=0; i<n; i++)
    {
        if(p[i]==0)
        {
            for(int j=i; j<n-1; j++)
                p[j] = p[j+1];//把字符往前移动
            p[n-1] = 0;//将最后一个设置为0
            n--;//缩短数组遍历长度
        }
    }
}

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2021-11-20

#include <iostream>
using namespace std;

void func(int* p, int n)
{
    //id指向第一个0所在位置
    int id=0;
    //i指向游标所在位置,遍历数组所有元素
    for(int i=0;i<n;i++){
        if(p[i]!=0){
           swap(p[i],p[id]);
            id++;
        }
    }
}
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;
}

C++ 解法, 执行用时: 2ms, 内存消耗: 392KB, 提交时间: 2021-11-18

#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[100];
    int j=0;
    for(int i=0;i<n;i++){
        if(p[i]!=0){
            b[j]=p[i];
            j++;
        }
    }
    for(int i=0;i<n;i++){
        if(i<j){
            p[i]=b[i];
        }
        else{
            p[i]=0;
        }
    }

}

上一题