解题思路:

注意事项:

参考代码

#include<stdio.h>
int CompactIntegers(int a[],int n)
{
    int i,j=0,b[n],m=0;
    for(i=0;i<n;i++)
    {
        if(a[i]==0)                                 //当最后一个元素为0.也成立,因为最后执行n--,最后一个元素在数组之外
        {
           for(j=i;j+1<n;j++)                   //用j,避免干扰i,i后元素整体前移
           {
               a[j]=a[j+1];
           }
                   i--;    
                 n--;

        }
    }
       return n;
}
main()
{
    int a[100],i,n;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
   n=CompactIntegers(a,n);
    for(i=0;i<n;i++)
    {
       printf("%d ",a[i]);
    }
   printf("\n%d",n);
}:

点赞(10)
 

0.0分

4 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 6 条评论

Moji 1年前 回复TA
@啊槿 如果没有i--的话,有连续的两个0第二个0就无法删除;每删去一个0后,n自然就减1了。
啊槿 4年前 回复TA
能不能解释一下 i--跟 n--
Spperman 6年前 回复TA
@海洋之心 嗯,数组少了0之后的元素整体移动的成本,谢谢同学啦,不过这样函数返回值或者参数和题目有点小出入吧
Spperman 6年前 回复TA
@海洋之心 嗯嗯,我试试,有时候想不到(嘿嘿)
海洋之心 6年前 回复TA
我觉得直接用两个数组会更加方便,嘻嘻
Spperman 6年前 回复TA
欢迎评论!