C语言删除数组中的0元素

写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。

题目:

题目链接:https://www.dotcpp.com/oj/problem1479.html

题目 1479: [蓝桥杯][算法提高VIP]删除数组中的0元素

时间限制: 1Sec 内存限制: 128MB 提交: 1463 解决: 922

题目描述
编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。
输入时首先读入数组长度,再依次读入每个元素。
将调用此函数后得到的数组和函数返回值输出。
输入
第一行一个数,表示数组个数

第二行为每个数字,空格分开

输出
输出处理后的数字以及个数,各占一行

样例输入
7
2 0 4 3 0 0 5
样例输出
2 4 3 5
4

C语言解法

#include <stdio.h>
int n;

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

    int len = CompactIntegers(a, n);
    
    for (int i = 0; i < len; i++)
        printf("%d ", a[i]);
    printf("\n%d", len);
    return 0;
}

int judge(int *a, int i)
{
    if (i == n - 1 && *(a + i) == 0)
        return -1;
    else if (*(a + i) == 0)
        judge(a, i + 1);
    else
        return i;
}

int CompactIntegers(int *a, int len)
{
    int tempin, temp, newlen = 0;
    for (int i = 0; i < len; i++)
        if (a[i] == 0)
        {
            tempin = judge(a, i);
            newlen=i;
            if (tempin == -1)
                break;
            temp = a[i];
            a[i] = a[tempin];
            a[tempin] = temp;

        }

    return newlen;
}

都看到这里了,各位哥哥姐姐叔叔阿姨给小王点个赞 关个注 留个言吧,和小王一起成长吧,你们的关注是对我最大的支持。
有事没事进来看看吧 : 小王的博客目录索引
C语言专栏看这 : C语言学习专栏


如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/106845302