2 qq 29754969 qq_29754969 于 2016.01.27 19:16 提问

大神们,请问程序错在哪里,编译没有错,就是不运行!
c

从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接受数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。输出删除后数组中元素的个数并依次输出数组元素。
样例输入: (输入格式说明:5为输入数据的个数,3 4 0 0 2 是以空格隔开的5个整数)
5
3 4 0 0 2
样例输出:(输出格式说明:3为非零数据的个数,3 4 2 是以空格隔开的3个非零整数)
3
3 4 2
样例输入:
7
0 0 7 0 0 9 0
样例输出:
2
7 9
样例输入:
3
0 0 0
样例输出:
0
#include
#include
void CompactIntegers(int array[], int *n)
{
int i,j;
int k =*n;//k为数组中元素个数
for (i = 0; i <k; i ++)
{
if (array[i]==0) {
for (j = i; j < k-1; j++)
{array[j]=array[j+1];}//将0后面的元素都往前移
array[k]=0;
i--;//让i还为当期值,因为后面的元素往前移了。
k--;//删除为0的元素
}
}
*n = k;
}
int main()
{
int n,i;
scanf("%d",&n);
int count[n];
for (i = 0; i < n; i ++)
scanf("%d",&count[i]);
CompactIntegers(count, &n);//打印删除数组中的0元素后的元素个数和元素
printf("%d\n",n);
for (i = 0 ; i < n; i ++)
printf("%d ",count[i]);
return 0;
}

6个回答

qq_27183003
qq_27183003   Ds   Rxr 2016.01.27 21:18
 #include<stdio.h>
int CompactIntegers(int array[], int n)
{
    int i,j;
    for(i=0,j=0; i<n; i++) 
    {
        if (array[i]==0)
        {
            j++;
        }
        if(j!=0 && array[i]!=0)
        {
            array[i-j]=array[i];//将0后面的元素都往前移
        }
    }
    return n-j;
}
int main() 
{
    int n,i;
    scanf("%d",&n);
    int count[100];
    for (i = 0; i < n; i ++)
        scanf("%d",&count[i]);
    n=CompactIntegers(count, n);//打印删除数组中的0元素后的元素个数和元素
    printf("%d\n",n);
    for (i = 0 ; i < n; i ++) 
        printf("%d ",count[i]);
    return 0;
}
qq_29754969
qq_29754969   2016.01.27 19:22

程序没有错,叨扰各位了,不过还是希望大家能给一些另外编程思想!

coderCold
coderCold   2016.01.27 19:43

太复杂了你这样,从左到右依次访问,遇到一个非0数就放到左边,一趟跑下来,时间复杂度o(n),空间o(1)

coderCold
coderCold 回复天狼666: int f(int *A, int len){ int flag = 0; for(int i = 0; i < len; i++) if(A[i]) A[flag++] = A[i]; return flag; }
2 年多之前 回复
qq_29754969
qq_29754969 哥们,你能不能给我来个简单点的,让我学习学习!
2 年多之前 回复
enpterexpress
enpterexpress   Rxr 2016.01.27 19:45

潜移默化,在学习的过程中自然而然形成的

YXTS122
YXTS122   2016.01.29 12:50

图片说明

91program
91program   Ds   Rxr 2016.01.27 19:24

程序没有错,那么你想要什么呢?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
程序有误,为什么Keil却没有报错
这两天在整1602,程序都写完后用Keil编译,有报错,但后来都一一解决了,于是烧进单片机,可不管怎么调1602就是不显示,首先我可以确定硬件电路是没有问题的,因为我用另外一个程序往1602里面写一个字符串,就可以显示。最后我只得对照书上的源程序,一个字母一个字母比对,比较了有3次,问题依然没有找到,都有点灰心了,花了我一天半时间于是就放一边了。今天下班后再一次找错,总与知道错在了哪里, /**
myeclipse导入工程没有错误之后,tomcat运行也没错误,但是浏览器访问该工程时报错。
报的错误大致意思可以看出来是tomcat出问题了,网上搜索之后,明白大概意思就是。我现在加载这个工程,他默写jar包和tomcat之前有的应该是冲突了。所以他的解决办法有两种:         (找不到原来的网站了,好吧大概意思如下)           1.就是删除WEB-INF下lib中和tomcat冲突的jar包,之前在build path中add library添加过tomcat的。但
eclipse项目一直显示有错,但是一直找不到错误在哪里
eclipse项目一直显示有错,但是一直找不到错误在哪里这天在写项目的时候碰到了这么个问题,项目上一直提示着红叉,但不管是文件里还是java buildpath里都找不到报错,然后我就郁闷了。后来给我找到一个解决方案,能查看当前错误是什么: eclipse–>Window–>show View–>Markers,出现一个面板,然后在这个面板里就能查看到底是什么在出错啦。
你什么都没错,只是太老了。
我从业到现在已经十年多了,这个问题是我从业五到七八年时最苦恼的话题。当时觉得这个世界太不友好了,互联网这个行业全是年轻人,30岁以上就压力非常大,我缓解这种压力的方式就是每个周末必须得去做一些我认为比较有意义的事。 说到底是因为内心有恐慌,担心有一天会失业,如果失业了一定要给自己找一个后路或者给自己备一技之长,不会因为被互联网淘汰之后收入就锐减。 一、职业焦虑的表层分析 为什么会有这样的
eclipse启动不起来且没有报错
办法1:打开workspace,/.metadata/.plugins/org.eclipse.core.resources/.snap这个文件删掉,.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi这个文件也删掉,再打开应该就没问题了。 办法2:换个新workspace。如果启动时没有弹出选择workspace的提示框,可以去ec
关于Xcode编译时编译失败但是没有报错的问题!
最近在编译xcode工程时遇到了一个编译失败但是没有报错的问题,在网上搜索了半天也没找到问题所在。 于是乎重新建立工程,重新导入文件,忙到最后问题依旧。 但是阴差阳错的被我找到了问题所在,为了下次遇到这个问题,可以搜索到答案,今天就把问题记录下来: 我的工程引用了另一个工程的库,并将此库工程包含在主工程中,库工程单独编译时没有问题,主工程在链接时报函数找不到,查找是因为库工程没有完全包含引用
博客园里的大神们
做IT码农的这段时间里,我就像一个拾荒者,在网络上寻找着各种技术的踪迹。发现它们,揣测它们,理解它们,最终驾驭它们。在这期间,总会碰见这样几个人,你总能在各个地方看到他们的文章,他们的影子。 他们被菜鸟称之为大神,其实单论技术,他们或许并不是最强的,但是他们已经能够把技术描述的非常通俗易懂。像我之前做eclipse插件开发的时候,菜鸟期基本上是看着八进制的博客度过的,直到自己开始看eclipse
myeclipse项目上报错,文件却没错
在整个工程同步下来时,添加所需的jar包后,文件中没有错误了,但项目依然报错。         首先,我运行下程序,发现缺包,添加相应包后,程序能够启动。                    注意,这个所缺的包,在程序启动前文件并没有报错,启动后文件也没有报错,故需通过启动查看Bug来加。                     加后,工程还是有叉,文件不报错。          然后,
C语言代码,求高手解答,为什么没有错误,但是结果不对
#include #include char *cmonth(int month) { char str_month[]={ "Illegal Month" "January" "February" "March" "April" "May" "June" "July" "August" "September" "October" "November"
关于javaweb项目红叉报错可但项目可以正常运行的解决办法
有时候导入的项目工程,文件夹左下角永远有一个红叉,但是由于不影响程序运行,所以之前一直忽略了,但是强迫症患者表示不解决巨蓝瘦,网上有些方法没有讲清楚,所以今天做了个总结来教大家如何详细解决这个问题! 1.首先这个Error它没有在"Console"显示,但这个Error其实是在"Problem"里面显示的,通过点击"Window"→"Show View"→"Other..."→"