写在前面:这里是小王成长日志,一名在校大学生,想在学习之余将自己的学习笔记分享出来,记录自己的成长轨迹,帮助可能需要的人。欢迎关注与留言。
题目:
题目链接: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语言学习专栏
如果以上内容有任何不准确或遗漏之处,或者你有更好的意见,就在下面留个言让我知道吧-我会尽我所能来回答。